using System;
using System.Collections.Generic;
using System.Text;
using System.Data.SqlClient;
using System.Data;
using System.Collections;

namespace CapaDatos
{
    public class ServidorDatos
    { 
        

        static SqlConnection conexion;

        static string strConexion = "Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\Documents and Settings\\PBalegno\\My Documents\\Visual Studio 2010\\Projects\\GestionNatatorios\\CapaDatos\\Natatorios.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";
        //static string strConexion = "Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\Users\\Pablo\\Desktop\\Final - Trabajo de Campo (436)\\GestionNatatorios\\CapaDatos\\Natatorios.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";
        private static int generarCodigo(string campo,string tabla)
        {
            int codigo;
            conexion = new SqlConnection(strConexion);
            string consulta = "SELECT MAX("+campo+") + 1 FROM " + tabla;
            try
            {
                conexion.Open();
                SqlDataAdapter da = new SqlDataAdapter(consulta, conexion);
                DataSet ds = new DataSet();
                da.Fill(ds);

                if (!DBNull.Value.Equals(ds.Tables[0].Rows[0].ItemArray[0]))
                {

                    codigo = Convert.ToInt32(ds.Tables[0].Rows[0].ItemArray[0]);
                }
                else {
                    codigo = 1;
                }

            }
            catch (Exception ex)
            {
                string error = ex.Message;
                codigo = -1;
            }
            finally
            {
                conexion.Close();
            }
            return codigo;
        }

        #region Cliente
        public static ArrayList buscarCliente(String pNro_doc)
        {

            string consulta = "SELECT nro_doc,nombre,apellido,direccion,localidad,email,telefono,id_cliente FROM TB_CLIENTE WHERE nro_doc='" + pNro_doc + "'";
            ArrayList registro = new ArrayList();
            ArrayList registros = new ArrayList();
            conexion = new SqlConnection(strConexion);
            try
            {
                SqlDataAdapter da = new SqlDataAdapter(consulta, conexion);
                DataSet ds = new DataSet();

                conexion.Open();
                da.Fill(ds);
                if (ds.Tables[0].Rows.Count > 0)
                {
                    registro.Add(ds.Tables[0].Rows[0].ItemArray[0].ToString());
                    registro.Add(ds.Tables[0].Rows[0].ItemArray[1].ToString());
                    registro.Add(ds.Tables[0].Rows[0].ItemArray[2].ToString());
                    registro.Add(ds.Tables[0].Rows[0].ItemArray[3].ToString());
                    registro.Add(ds.Tables[0].Rows[0].ItemArray[4].ToString());
                    registro.Add(ds.Tables[0].Rows[0].ItemArray[5].ToString());
                    registro.Add(ds.Tables[0].Rows[0].ItemArray[6].ToString());
                    registro.Add(ds.Tables[0].Rows[0].ItemArray[7].ToString());
                    registros.Add(registro);
                }
            }
            catch (Exception ex)
            {
                string error = ex.Message;
            }
            finally
            {
                conexion.Close();
            }

            return registros;
        }
        
        public static ArrayList buscarCliente(int pCodigo)
        {

            string consulta = "SELECT nro_doc,nombre,apellido,direccion,localidad,email,telefono,id_cliente,id_tipo FROM TB_CLIENTE WHERE id_cliente=" + pCodigo;
            ArrayList registro = new ArrayList();
            ArrayList registros = new ArrayList();
            conexion = new SqlConnection(strConexion);
            try
            {
                SqlDataAdapter da = new SqlDataAdapter(consulta, conexion);
                DataSet ds = new DataSet();

                conexion.Open();
                da.Fill(ds);
                if (ds.Tables[0].Rows.Count > 0)
                {
                    registro.Add(ds.Tables[0].Rows[0].ItemArray[0].ToString());
                    registro.Add(ds.Tables[0].Rows[0].ItemArray[1].ToString());
                    registro.Add(ds.Tables[0].Rows[0].ItemArray[2].ToString());
                    registro.Add(ds.Tables[0].Rows[0].ItemArray[3].ToString());
                    registro.Add(ds.Tables[0].Rows[0].ItemArray[4].ToString());
                    registro.Add(ds.Tables[0].Rows[0].ItemArray[5].ToString());
                    registro.Add(ds.Tables[0].Rows[0].ItemArray[6].ToString());
                    registro.Add(ds.Tables[0].Rows[0].ItemArray[7].ToString());
                    registro.Add(ds.Tables[0].Rows[0].ItemArray[8].ToString());
                    registros.Add(registro);
                }
            }
            catch (Exception ex)
            {
                string error = ex.Message;
            }
            finally
            {
                conexion.Close();
            }

            return registros;

        }

        public static bool registrarCliente(ArrayList datos)
        {
            bool devolver = false;
            string consulta = "INSERT INTO TB_CLIENTE (id_cliente,id_tipo, nro_doc, nombre, apellido, direccion, localidad, email, telefono) VALUES ('"
                + generarCodigo("id_cliente", "TB_CLIENTE").ToString() + "',"
                + datos[0].ToString().Trim() + ", '"
                + datos[1].ToString().Trim() + "', '"
                + datos[2].ToString().Trim() + "', '"
                + datos[3].ToString().Trim() + "', '"
                + datos[4].ToString().Trim() + "', '"
                + datos[5].ToString().Trim() + "', '"
                + datos[6].ToString().Trim() + "', '"
                + datos[7].ToString().Trim() + "')";

            conexion = new SqlConnection(strConexion);
            SqlCommand cmd = new SqlCommand(consulta, conexion);
            try
            {
                conexion.Open();
                cmd.ExecuteNonQuery();
                cmd.Dispose();
                devolver = true;

            }
            catch (Exception ex)
            {
                string error = ex.Message;
            }
            finally
            {
                conexion.Close();
            }
            return devolver;
        }

        public static bool modificarCliente(ArrayList datos)
        {
            bool devolver = false;
            string consulta = "UPDATE TB_CLIENTE SET " 
                                  + "nombre='" + datos[1].ToString().Trim() + "', "
                                  + "apellido='" + datos[2].ToString().Trim() + "', "
                                  + "direccion='" + datos[3].ToString().Trim() + "', "
                                  + "localidad='" + datos[4].ToString().Trim() + "', "
                                  + "email='" + datos[5].ToString().Trim() + "', "
                                  + "telefono='" + datos[6].ToString().Trim() + "' "
                                  + "WHERE id_tipo=" + datos[7].ToString().Trim()+ " AND nro_doc='" + datos[0].ToString().Trim() + "'";

            conexion = new SqlConnection(strConexion);
            SqlCommand cmd = new SqlCommand(consulta, conexion);
            try
            {
                conexion.Open();
                cmd.ExecuteNonQuery();
                cmd.Dispose();
                devolver = true;

            }
            catch (Exception ex)
            {
                string error = ex.Message;
            }
            finally
            {
                conexion.Close();
            }
            return devolver;
        }

        public static bool eliminarCliente(int tipo, String pNro_doc)
        {
            bool devolver = false;
            string consulta = "DELETE FROM TB_CLIENTE WHERE id_tipo="+tipo+" and nro_doc='" + pNro_doc + "'";

            conexion = new SqlConnection(strConexion);
            SqlCommand cmd = new SqlCommand(consulta, conexion);
            try
            {
                conexion.Open();
                cmd.ExecuteNonQuery();
                cmd.Dispose();
                devolver = true;

            }
            catch (Exception ex)
            {
                string error = ex.Message;
            }
            finally
            {
                conexion.Close();
            }
            return devolver;
        }
       
        #endregion

        #region Constructor
        public static ArrayList buscarConstructor(String pNro_doc)
        {
            string consulta = "SELECT nro_doc,nombre,apellido,email,celular,id_constructor,id_tipo FROM TB_CONSTRUCTOR WHERE nro_doc='" + pNro_doc + "'";
            ArrayList registro = new ArrayList();
            ArrayList registros = new ArrayList();
            conexion = new SqlConnection(strConexion);
            try
            {
                SqlDataAdapter da = new SqlDataAdapter(consulta, conexion);
                DataSet ds = new DataSet();

                conexion.Open();
                da.Fill(ds);

                if (ds.Tables[0].Rows.Count > 0)
                {
                    registro.Add(ds.Tables[0].Rows[0].ItemArray[0].ToString());
                    registro.Add(ds.Tables[0].Rows[0].ItemArray[1].ToString());
                    registro.Add(ds.Tables[0].Rows[0].ItemArray[2].ToString());
                    registro.Add(ds.Tables[0].Rows[0].ItemArray[3].ToString());
                    registro.Add(ds.Tables[0].Rows[0].ItemArray[4].ToString());
                    registro.Add(ds.Tables[0].Rows[0].ItemArray[5].ToString());
                    registro.Add(ds.Tables[0].Rows[0].ItemArray[6].ToString());
                    registros.Add(registro);
                }
            }
            catch (Exception ex)
            {
                string error = ex.Message;
            }
            finally
            {
                conexion.Close();
            }

            return registros;

        }


        public static ArrayList buscarConstructor(int codigo)
        {
            string consulta = "SELECT nro_doc,nombre,apellido,email,celular,id_constructor,id_tipo FROM TB_CONSTRUCTOR WHERE id_constructor="+codigo;
            ArrayList registro = new ArrayList();
            ArrayList registros = new ArrayList();
            conexion = new SqlConnection(strConexion);
            try
            {
                SqlDataAdapter da = new SqlDataAdapter(consulta, conexion);
                DataSet ds = new DataSet();

                conexion.Open();
                da.Fill(ds);

                if (ds.Tables[0].Rows.Count > 0)
                {
                    registro.Add(ds.Tables[0].Rows[0].ItemArray[0].ToString());
                    registro.Add(ds.Tables[0].Rows[0].ItemArray[1].ToString());
                    registro.Add(ds.Tables[0].Rows[0].ItemArray[2].ToString());
                    registro.Add(ds.Tables[0].Rows[0].ItemArray[3].ToString());
                    registro.Add(ds.Tables[0].Rows[0].ItemArray[4].ToString());
                    registro.Add(ds.Tables[0].Rows[0].ItemArray[5].ToString());
                    registro.Add(ds.Tables[0].Rows[0].ItemArray[6].ToString());
                    registros.Add(registro);
                }
            }
            catch (Exception ex)
            {
                string error = ex.Message;
            }
            finally
            {
                conexion.Close();
            }

            return registros;

        }

        public static bool registrarConstructor(ArrayList datos)
        {
            bool devolver = false;
            string consulta = "INSERT INTO TB_CONSTRUCTOR (id_constructor,id_tipo, nro_doc, nombre, apellido, email, celular) VALUES ("
                + generarCodigo("id_constructor","TB_CONSTRUCTOR").ToString() + ","
                + datos[0].ToString().Trim() +", '" 
                + datos[1].ToString().Trim() + "', '"
                + datos[2].ToString().Trim() + "', '"
                + datos[3].ToString().Trim() + "', '"
                + datos[4].ToString().Trim() + "', '"
                + datos[5].ToString().Trim() + "')";

            conexion = new SqlConnection(strConexion);
            SqlCommand cmd = new SqlCommand(consulta, conexion);
            try
            {
                conexion.Open();
                cmd.ExecuteNonQuery();
                cmd.Dispose();
                devolver = true;

            }
            catch (Exception ex)
            {
                string error = ex.Message;
            }
            finally
            {
                conexion.Close();
            }
            return devolver;
        }

        public static bool modificarConstructor(ArrayList datos)
        {
            bool devolver = false;
            string consulta = "UPDATE TB_CONSTRUCTOR SET "
                                  + "nombre='" + datos[1].ToString().Trim() + "', "
                                  + "apellido='" + datos[2].ToString().Trim() + "', "
                                  + "email='" + datos[3].ToString().Trim() + "', "
                                  + "celular='" + datos[4].ToString().Trim() + "' "
                                  + "WHERE id_tipo=" + datos[5].ToString().Trim() + " AND nro_doc='" + datos[0].ToString().Trim() + "'";

            conexion = new SqlConnection(strConexion);
            SqlCommand cmd = new SqlCommand(consulta, conexion);
            try
            {
                conexion.Open();
                cmd.ExecuteNonQuery();
                cmd.Dispose();
                devolver = true;

            }
            catch (Exception ex)
            {
                string error = ex.Message;
            }
            finally
            {
                conexion.Close();
            }
            return devolver;
        }

        public static bool eliminarConstructor(int pTipo, String pNro_doc)
        {
            bool devolver = false;
            string consulta = "DELETE FROM TB_CONSTRUCTOR WHERE id_tipo="+pTipo+" AND nro_doc='" + pNro_doc + "'";

            conexion = new SqlConnection(strConexion);
            SqlCommand cmd = new SqlCommand(consulta, conexion);
            try
            {
                conexion.Open();
                cmd.ExecuteNonQuery();
                cmd.Dispose();
                devolver = true;

            }
            catch (Exception ex)
            {
                string error = ex.Message;
            }
            finally
            {
                conexion.Close();
            }
            return devolver;
        }
        #endregion

        #region Usuario
        public static ArrayList buscarUsuario(int tipo,String pNro_doc)
        {

            string consulta = "SELECT nro_doc,nombre,apellido,mail,telefono,id_perfil, cambia_pass,pass,id_tipo FROM TB_USUARIO WHERE id_tipo="+tipo+" AND nro_doc='" + pNro_doc + "'";
            ArrayList registro = new ArrayList();
            ArrayList registros = new ArrayList();
            conexion = new SqlConnection(strConexion);
            try
            {
                SqlDataAdapter da = new SqlDataAdapter(consulta, conexion);
                DataSet ds = new DataSet();

                conexion.Open();
                da.Fill(ds);
               
                if (ds.Tables[0].Rows.Count > 0)
                {
                    registro.Add(ds.Tables[0].Rows[0].ItemArray[0].ToString());
                    registro.Add(ds.Tables[0].Rows[0].ItemArray[1].ToString());
                    registro.Add(ds.Tables[0].Rows[0].ItemArray[2].ToString());
                    registro.Add(ds.Tables[0].Rows[0].ItemArray[3].ToString());
                    registro.Add(ds.Tables[0].Rows[0].ItemArray[4].ToString());
                    registro.Add(ds.Tables[0].Rows[0].ItemArray[5].ToString());
                    registro.Add(ds.Tables[0].Rows[0].ItemArray[6].ToString());
                    registro.Add(ds.Tables[0].Rows[0].ItemArray[7].ToString());
                    registro.Add(ds.Tables[0].Rows[0].ItemArray[8].ToString());
                    registros.Add(registro);
                }
            }
            catch (Exception ex)
            {
                string error = ex.Message;
            }
            finally
            {
                conexion.Close();
            }

            return registros;

        }

        public static bool registrarUsuario(ArrayList datos)
        {
            bool devolver = false;
            string consulta = "INSERT INTO TB_USUARIO (id_usuario,id_tipo, nro_doc, nombre, apellido, mail, telefono,id_perfil,cambia_pass,pass) VALUES ("
                + generarCodigo("id_usuario", "TB_USUARIO").ToString() + ","
                + datos[0].ToString().Trim() + ", '"
                + datos[1].ToString().Trim() + "', '"
                + datos[2].ToString().Trim() + "', '"
                + datos[3].ToString().Trim() + "', '"
                + datos[4].ToString().Trim() + "', '"
                + datos[5].ToString().Trim() + "', "
                + datos[6].ToString().Trim() + ", "
                + "1, '123456ABC')";
          

            conexion = new SqlConnection(strConexion);
            SqlCommand cmd = new SqlCommand(consulta, conexion);
            try
            {
                conexion.Open();
                cmd.ExecuteNonQuery();
                cmd.Dispose();
                devolver = true;

            }
            catch (Exception ex)
            {
                string error = ex.Message;
            }
            finally
            {
                conexion.Close();
            }
            return devolver;
        }

        public static bool modificarUsuario(ArrayList datos)
        {
            bool devolver = false;
            string consulta = "UPDATE TB_USUARIO SET "
                                  + "nombre='" + datos[1].ToString().Trim() + "', "
                                  + "apellido='" + datos[2].ToString().Trim() + "', "
                                  + "mail='" + datos[3].ToString().Trim() + "', "
                                  + "telefono='" + datos[4].ToString().Trim() + "' "
                                  + "WHERE id_tipo=" + datos[5].ToString().Trim() + " AND nro_doc='" + datos[0].ToString().Trim() + "'";

            conexion = new SqlConnection(strConexion);
            SqlCommand cmd = new SqlCommand(consulta, conexion);
            try
            {
                conexion.Open();
                cmd.ExecuteNonQuery();
                cmd.Dispose();
                devolver = true;

            }
            catch (Exception ex)
            {
                string error = ex.Message;
            }
            finally
            {
                conexion.Close();
            }
            return devolver;
        }

        public static bool eliminarUsuario(String pNro_doc)
        {
            bool devolver = false;
            string consulta = "DELETE FROM TB_USUARIO WHERE nro_doc='" + pNro_doc + "'";

            conexion = new SqlConnection(strConexion);
            SqlCommand cmd = new SqlCommand(consulta, conexion);
            try
            {
                conexion.Open();
                cmd.ExecuteNonQuery();
                cmd.Dispose();
                devolver = true;

            }
            catch (Exception ex)
            {
                string error = ex.Message;
            }
            finally
            {
                conexion.Close();
            }
            return devolver;
        }

        public static ArrayList buscarPerfil(int pId)
        {

            string consulta = "SELECT id_perfil,descripcion FROM TB_PERFIL WHERE id_perfil=" + pId.ToString();

            ArrayList usu = new ArrayList();
            ArrayList dato = new ArrayList();
            conexion = new SqlConnection(strConexion);
            try
            {
                conexion.Open();
                SqlDataAdapter da = new SqlDataAdapter(consulta, conexion);
                DataSet ds = new DataSet();
                da.Fill(ds);
                if (ds.Tables[0].Rows.Count > 0)
                {
                    usu.Add(ds.Tables[0].Rows[0].ItemArray[0].ToString());
                    usu.Add(ds.Tables[0].Rows[0].ItemArray[1].ToString());
                    dato.Add(usu);
                }
            }
            catch (Exception ex)
            {
                string error = ex.Message;
            }
            finally
            {
                conexion.Close();
            }

            return dato;

        }

        public static bool modificarPerfil(int idPerfil,String pNro_doc)
        {
            bool devolver = false;

            string consulta = "UPDATE TB_USUARIO SET id_perfil=" + idPerfil + " WHERE nro_doc='" + pNro_doc + "'";

            conexion = new SqlConnection(strConexion);
            SqlCommand cmd = new SqlCommand(consulta, conexion);
            try
            {
                conexion.Open();
                cmd.ExecuteNonQuery();
                cmd.Dispose();
                devolver = true;

            }
            catch (Exception ex)
            {
                string error = ex.Message;
            }
            finally
            {
                conexion.Close();
            }
            return devolver;
        }
        
        public static ArrayList buscarPerfiles()
        {
            string consulta = "SELECT id_perfil, descripcion FROM TB_PERFIL";

            ArrayList perfil;
            ArrayList dato = new ArrayList();
            conexion = new SqlConnection(strConexion);
            try
            {
                conexion.Open();
                SqlDataAdapter da = new SqlDataAdapter(consulta, conexion);
                DataSet ds = new DataSet();
                da.Fill(ds);
                for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                {
                    perfil = new ArrayList();
                    perfil.Add(ds.Tables[0].Rows[i].ItemArray[0].ToString());
                    perfil.Add(ds.Tables[0].Rows[i].ItemArray[1].ToString());
                    dato.Add(perfil);
                }
            }
            catch (Exception ex)
            {
                string error = ex.Message;
            }
            finally
            {
                conexion.Close();
            }

            return dato;

        }
        
        #endregion

        #region Presupuesto

        public static bool modificarEtapaObra(int pEtapaObra,  string pFechaIniReal, string pFechaFinReal)
        {
            conexion = new SqlConnection(strConexion);
            conexion.Open();
            SqlTransaction myTrans = conexion.BeginTransaction();
            SqlCommand cmd = conexion.CreateCommand();
            bool transaccionOk = true;
            try
            {
                string update = "UPDATE TB_ETAPA_OBRA SET ";

                if (!String.IsNullOrEmpty(pFechaIniReal))
                {
                    update = update + "fecha_inicio_real=@fecha_inicial_real";
                    cmd.Parameters.Add(new SqlParameter("@fecha_inicial_real", SqlDbType.DateTime)).Value =  Convert.ToDateTime(pFechaIniReal);
                }
               
                if (!String.IsNullOrEmpty(pFechaFinReal))
                {
                   update = update + ", fecha_fin_real=@fecha_fin_real";
                   cmd.Parameters.Add(new SqlParameter("@fecha_fin_real", SqlDbType.DateTime)).Value = Convert.ToDateTime(pFechaFinReal);
                }
                update = update + " WHERE id_etapa_obra="+pEtapaObra;
                cmd.CommandText = update;
                cmd.Transaction = myTrans;
                cmd.ExecuteNonQuery();
                myTrans.Commit();
            }
            catch (Exception ex)
            {
                string error = ex.Message;
                myTrans.Rollback();
                transaccionOk = false;
            }
            finally
            {
                conexion.Close();
            }
            return transaccionOk;
        }

        public static void modificarOT(int pCodigo, int pEstadoOt)
        {
            conexion = new SqlConnection(strConexion);
            conexion.Open();
            SqlTransaction myTrans = conexion.BeginTransaction();
            SqlCommand cmd = conexion.CreateCommand();
            try
            {


                string update = "UPDATE TB_ORDEN_TRABAJO SET id_estado_ot=" + pEstadoOt +" WHERE id_orden_trabajo=" + pCodigo;

                cmd.CommandText = update;


                cmd.Transaction = myTrans;
                cmd.ExecuteNonQuery();
                myTrans.Commit();

            }
            catch (Exception ex)
            {
                string error = ex.Message;
                myTrans.Rollback();
            }
            finally
            {
                conexion.Close();
            }

        }


    
           
        public static ArrayList buscarRevestimiento(int pId)
        {

            string consulta = "SELECT id_revestimiento,descripcion FROM TB_REVESTIMIENTO WHERE id_revestimiento=" + pId.ToString();

            ArrayList revestimiento = new ArrayList();
            ArrayList dato = new ArrayList();
            conexion = new SqlConnection(strConexion);
            try
            {
                conexion.Open();
                SqlDataAdapter da = new SqlDataAdapter(consulta, conexion);
                DataSet ds = new DataSet();
                da.Fill(ds);
                if (ds.Tables[0].Rows.Count > 0)
                {
                    revestimiento.Add(ds.Tables[0].Rows[0].ItemArray[0].ToString());
                    revestimiento.Add(ds.Tables[0].Rows[0].ItemArray[1].ToString());
                    dato.Add(revestimiento);
                }
            }
            catch (Exception ex)
            {
                string error = ex.Message;
            }
            finally
            {
                conexion.Close();
            }

            return dato;

        }
            public static ArrayList buscarAccesorio(int pId)
            {

                string consulta = "SELECT id_accesorio,descripcion,precio FROM TB_ACCESORIO WHERE id_accesorio=" + pId.ToString();

                ArrayList accesorio = new ArrayList();
                ArrayList dato = new ArrayList();
                conexion = new SqlConnection(strConexion);
                try
                {
                    conexion.Open();
                    SqlDataAdapter da = new SqlDataAdapter(consulta, conexion);
                    DataSet ds = new DataSet();
                    da.Fill(ds);
                    if (ds.Tables[0].Rows.Count > 0)
                    {
                        accesorio.Add(ds.Tables[0].Rows[0].ItemArray[0].ToString());
                        accesorio.Add(ds.Tables[0].Rows[0].ItemArray[1].ToString());
                        accesorio.Add(ds.Tables[0].Rows[0].ItemArray[2].ToString());
                        dato.Add(accesorio);
                    }
                }
                catch (Exception ex)
                {
                    string error = ex.Message;
                }
                finally
                {
                    conexion.Close();
                }

                return dato;

            }
            public static ArrayList buscarTerminacion(int pId)
            {

                string consulta = "SELECT id_terminacion,descripcion,precio FROM TB_TERMINACION WHERE id_terminacion=" + pId.ToString();

                ArrayList terminacion = new ArrayList();
                ArrayList dato = new ArrayList();
                conexion = new SqlConnection(strConexion);
                try
                {
                    conexion.Open();
                    SqlDataAdapter da = new SqlDataAdapter(consulta, conexion);
                    DataSet ds = new DataSet();
                    da.Fill(ds);
                    if (ds.Tables[0].Rows.Count > 0)
                    {
                        terminacion.Add(ds.Tables[0].Rows[0].ItemArray[0].ToString());
                        terminacion.Add(ds.Tables[0].Rows[0].ItemArray[1].ToString());
                        terminacion.Add(ds.Tables[0].Rows[0].ItemArray[2].ToString());
                        dato.Add(terminacion);
                    }
                }
                catch (Exception ex)
                {
                    string error = ex.Message;
                }
                finally
                {
                    conexion.Close();
                }

                return dato;

            }
            public static ArrayList buscarCategoria(int pId)
            {

                string consulta = "SELECT id_categoria,descripcion,jornal FROM TB_CATEGORIA WHERE id_categoria=" + pId.ToString();

                ArrayList categoria = new ArrayList();
                ArrayList dato = new ArrayList();
                conexion = new SqlConnection(strConexion);
                try
                {
                    conexion.Open();
                    SqlDataAdapter da = new SqlDataAdapter(consulta, conexion);
                    DataSet ds = new DataSet();
                    da.Fill(ds);
                    if (ds.Tables[0].Rows.Count > 0)
                    {
                        categoria.Add(ds.Tables[0].Rows[0].ItemArray[0].ToString());
                        categoria.Add(ds.Tables[0].Rows[0].ItemArray[1].ToString());
                        categoria.Add(ds.Tables[0].Rows[0].ItemArray[2].ToString());
                        dato.Add(categoria);
                    }
                }
                catch (Exception ex)
                {
                    string error = ex.Message;
                }
                finally
                {
                    conexion.Close();
                }

                return dato;

            } 
            public static ArrayList buscarRevestimientos()
            {

                string consulta = "SELECT id_revestimiento,descripcion FROM TB_REVESTIMIENTO";

                ArrayList reves;
                ArrayList dato = new ArrayList();
                conexion = new SqlConnection(strConexion);
                try
                {
                    conexion.Open();
                    SqlDataAdapter da = new SqlDataAdapter(consulta, conexion);
                    DataSet ds = new DataSet();
                    da.Fill(ds);
                    for (int i=0; i < ds.Tables[0].Rows.Count;i ++)
                    {
                        reves = new ArrayList();
                        reves.Add(ds.Tables[0].Rows[i].ItemArray[0].ToString());
                        reves.Add(ds.Tables[0].Rows[i].ItemArray[1].ToString());
                        dato.Add(reves);
                    }
                }
                catch (Exception ex)
                {
                    string error = ex.Message;
                }
                finally
                {
                    conexion.Close();
                }

                return dato;

            }
            public static ArrayList buscarAccesorios()
            {

                string consulta = "SELECT id_accesorio,descripcion,precio FROM TB_ACCESORIO";

                ArrayList accesorio;
                ArrayList dato = new ArrayList();
                conexion = new SqlConnection(strConexion);
                try
                {
                    conexion.Open();
                    SqlDataAdapter da = new SqlDataAdapter(consulta, conexion);
                    DataSet ds = new DataSet();
                    da.Fill(ds);
                    for (int i=0; i < ds.Tables[0].Rows.Count;i ++)
                    {
                        accesorio = new ArrayList();
                        accesorio.Add(ds.Tables[0].Rows[i].ItemArray[0].ToString());
                        accesorio.Add(ds.Tables[0].Rows[i].ItemArray[1].ToString());
                        accesorio.Add(ds.Tables[0].Rows[i].ItemArray[2].ToString());
                        dato.Add(accesorio);
                    }
                }
                catch (Exception ex)
                {
                    string error = ex.Message;
                }
                finally
                {
                    conexion.Close();
                }

                return dato;

            }
            public static ArrayList buscarAccesorios(long idPresup)
            {

                string consulta = "SELECT id_accesorio,cantidad,fecha FROM TB_ACCESORIO_PRESUPUESTO WHERE id_presupuesto="+idPresup.ToString();

                ArrayList accesorio;
                ArrayList dato = new ArrayList();
                conexion = new SqlConnection(strConexion);
                try
                {
                    conexion.Open();
                    SqlDataAdapter da = new SqlDataAdapter(consulta, conexion);
                    DataSet ds = new DataSet();
                    da.Fill(ds);
                    for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                    {
                        accesorio = new ArrayList();
                        accesorio.Add(ds.Tables[0].Rows[i].ItemArray[0].ToString());                      
                        accesorio.Add(ds.Tables[0].Rows[i].ItemArray[1].ToString());
                        accesorio.Add(ds.Tables[0].Rows[i].ItemArray[2].ToString());
                        dato.Add(accesorio);
                    }
                }
                catch (Exception ex)
                {
                    string error = ex.Message;
                }
                finally
                {
                    conexion.Close();
                }

                return dato;

            }
            public static ArrayList buscarTerminaciones(long idPresup)
            {

                string consulta = "SELECT id_terminacion,fecha FROM TB_TERMINACION_PRESUPUESTO WHERE id_presupuesto=" + idPresup.ToString();

                ArrayList terminacion;
                ArrayList dato = new ArrayList();
                conexion = new SqlConnection(strConexion);
                try
                {
                    conexion.Open();
                    SqlDataAdapter da = new SqlDataAdapter(consulta, conexion);
                    DataSet ds = new DataSet();
                    da.Fill(ds);
                    for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                    {
                        terminacion = new ArrayList();
                        terminacion.Add(ds.Tables[0].Rows[i].ItemArray[0].ToString());
                        terminacion.Add(ds.Tables[0].Rows[i].ItemArray[1].ToString());
                        dato.Add(terminacion);
                    }
                }
                catch (Exception ex)
                {
                    string error = ex.Message;
                }
                finally
                {
                    conexion.Close();
                }

                return dato;

            }
            public static ArrayList buscarCategorias(long idPresup)
            {
                string consulta = "SELECT id_categoria,cantidad,fecha FROM TB_CATEGORIA_PRESUPUESTO WHERE id_presupuesto=" + idPresup.ToString();

                ArrayList categoria;
                ArrayList dato = new ArrayList();
                conexion = new SqlConnection(strConexion);
                try
                {
                    conexion.Open();
                    SqlDataAdapter da = new SqlDataAdapter(consulta, conexion);
                    DataSet ds = new DataSet();
                    da.Fill(ds);
                    for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                    {
                        categoria = new ArrayList();
                        categoria.Add(ds.Tables[0].Rows[i].ItemArray[0].ToString());
                        categoria.Add(ds.Tables[0].Rows[i].ItemArray[1].ToString());
                        categoria.Add(ds.Tables[0].Rows[i].ItemArray[2].ToString());
                        dato.Add(categoria);
                    }
                }
                catch (Exception ex)
                {
                    string error = ex.Message;
                }
                finally
                {
                    conexion.Close();
                }

                return dato;

            }
            public static ArrayList buscarTerminaciones()
            {

                string consulta = "SELECT id_terminacion,descripcion,precio FROM TB_TERMINACION";

                ArrayList terminacion;
                ArrayList dato = new ArrayList();
                conexion = new SqlConnection(strConexion);
                try
                {
                    conexion.Open();
                    SqlDataAdapter da = new SqlDataAdapter(consulta, conexion);
                    DataSet ds = new DataSet();
                    da.Fill(ds);
                    for (int i=0; i < ds.Tables[0].Rows.Count;i ++)
                    {
                        terminacion = new ArrayList();
                        terminacion.Add(ds.Tables[0].Rows[i].ItemArray[0].ToString());
                        terminacion.Add(ds.Tables[0].Rows[i].ItemArray[1].ToString());
                        terminacion.Add(ds.Tables[0].Rows[i].ItemArray[2].ToString());
                        dato.Add(terminacion);
                    }
                }
                catch (Exception ex)
                {
                    string error = ex.Message;
                }
                finally
                {
                    conexion.Close();
                }

                return dato;

            }
            public static ArrayList buscarCategorias()
            {

                string consulta = "SELECT id_categoria,descripcion,jornal FROM TB_CATEGORIA";

                ArrayList categoria;
                ArrayList dato = new ArrayList();
                conexion = new SqlConnection(strConexion);
                try
                {
                    conexion.Open();
                    SqlDataAdapter da = new SqlDataAdapter(consulta, conexion);
                    DataSet ds = new DataSet();
                    da.Fill(ds);
                    for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                    {
                        categoria = new ArrayList();
                        categoria.Add(ds.Tables[0].Rows[i].ItemArray[0].ToString());
                        categoria.Add(ds.Tables[0].Rows[i].ItemArray[1].ToString());
                        categoria.Add(ds.Tables[0].Rows[i].ItemArray[2].ToString());
                        dato.Add(categoria);
                    }
                }
                catch (Exception ex)
                {
                    string error = ex.Message;
                }
                finally
                {
                    conexion.Close();
                }

                return dato;

            }
            private static string registrarPiscina(ArrayList datos,int cod,SqlCommand cmd)
            {
                string insert = "INSERT INTO TB_PISCINA (id_piscina, direccion, localidad, ancho, largo, profundidad) VALUES ("
                        + cod + ", '"
                        + datos[0].ToString().Trim() + "', '"
                        + datos[1].ToString().Trim() + "', "
                        +"@ancho, "
                        +"@largo, "
                        +"@profundidad)";

                cmd.Parameters.Add(new SqlParameter("@ancho", SqlDbType.Float)).Value = Convert.ToDouble(datos[2].ToString().Trim());
                cmd.Parameters.Add(new SqlParameter("@largo", SqlDbType.Float)).Value = Convert.ToDouble(datos[3].ToString().Trim());
                cmd.Parameters.Add(new SqlParameter("@profundidad", SqlDbType.Float)).Value = Convert.ToDouble(datos[4].ToString().Trim());
                return insert;
            }
            private static string registrarCategorias(long presup, int cat, int cant, SqlCommand cmd)
            {
                string insert = "INSERT INTO TB_CATEGORIA_PRESUPUESTO " 
                        + " (id_presupuesto, id_categoria, cantidad, fecha) VALUES ("
                        + presup + ","
                        + cat + ","
                        + cant + ","
                        + "@fecha)";

              
                return insert;
            }
            private static string registrarAccesorios(long presup, int acc, int cant, SqlCommand cmd)
            {
                string insert = "INSERT INTO TB_ACCESORIO_PRESUPUESTO "
                       + " (id_presupuesto, id_accesorio,cantidad, fecha) VALUES ("
                       + presup + ","
                       + acc + ","
                       + cant + ","
                       + "@fecha)";
                return insert;
            }
            private static string registrarTerminaciones(long presup, int codTer,SqlCommand cmd)
            {
                string insert = "INSERT INTO TB_TERMINACION_PRESUPUESTO "
                       + " (id_presupuesto, id_terminacion, fecha) VALUES ("
                       + presup + ","
                       + codTer + ","
                       + "@fecha)";
                return insert;
            }
            private static string armarInsertPresupueto(ArrayList datos,int cod,int idPiscina,DateTime date,SqlCommand cmd){
             string consulta = "INSERT INTO TB_PRESUPUESTO (id_presupuesto, id_estado_presupuesto,id_revestimiento,precio_reves,id_piscina,fecha_estado,apellido,direccion,mail,nombre,localidad, telefono,precio_m2,borrado) VALUES ("
                    + cod + ","
                    + (int)PresupuestoEnum.PRESUPUESTO_PENDIENTE + ","
                    + datos[12].ToString().Trim() + ", "
                    + "@precio_reves,"
                    + idPiscina + ","
                    + "@fecha, '"
                    + datos[0].ToString().Trim() + "', '"
                    + datos[1].ToString().Trim() + "', '"
                    + datos[2].ToString().Trim() + "', '"
                    + datos[3].ToString().Trim() + "', '"
                    + datos[4].ToString().Trim() + "', '"
                    + datos[5].ToString().Trim() + "', "
                    + "@precio_m2,0)";

             cmd.Parameters.Add(new SqlParameter("@precio_reves", SqlDbType.Float)).Value = Convert.ToDouble(datos[11].ToString().Trim());
             cmd.Parameters.Add(new SqlParameter("@precio_m2", SqlDbType.Float)).Value = Convert.ToDouble(datos[6].ToString().Trim());
             
            
                return consulta;
            }
            public static long registrarPresupuesto(ArrayList datos) 
            {
                long devolver = 0;
                conexion = new SqlConnection(strConexion);
                conexion.Open();
                SqlTransaction myTrans = conexion.BeginTransaction();
                SqlCommand cmd = conexion.CreateCommand();
                DateTime date = DateTime.Now;
                try
                {

                    SqlParameter fechaParam = new SqlParameter("@fecha", SqlDbType.DateTime);
                    cmd.Parameters.Add(fechaParam).Value = date;

                    int codPiscina = generarCodigo("id_piscina","TB_PISCINA");
                    cmd.CommandText = registrarPiscina((ArrayList)datos[7], codPiscina,cmd);
                    cmd.Transaction = myTrans;
                    cmd.ExecuteNonQuery();

                    int codPresupuesto = generarCodigo("id_presupuesto","TB_PRESUPUESTO");
                    cmd.CommandText = armarInsertPresupueto(datos, codPresupuesto, codPiscina, date,cmd);
                    cmd.Transaction = myTrans;
                    cmd.ExecuteNonQuery();

                    foreach (int i in (ArrayList)datos[8])
                    {
                        cmd.CommandText = registrarTerminaciones(codPresupuesto, i,cmd);
                        cmd.Transaction = myTrans;
                        cmd.ExecuteNonQuery();
                    }

                    foreach (KeyValuePair<int, int> i in (Dictionary<int, int>)datos[9])
                    {
                        cmd.CommandText = registrarAccesorios(codPresupuesto, i.Key, i.Value, cmd);
                        cmd.Transaction = myTrans;
                        cmd.ExecuteNonQuery();
                    }

                    foreach (KeyValuePair<int, int> i in (Dictionary<int, int>)datos[10])
                    {
                        cmd.CommandText = registrarCategorias(codPresupuesto, i.Key, i.Value,cmd);
                        cmd.Transaction = myTrans;
                        cmd.ExecuteNonQuery();
                    }

                    devolver = codPresupuesto;
                    myTrans.Commit();

                }
                catch (Exception ex)
                {
                    string error = ex.Message;
                    myTrans.Rollback();
                }
                finally
                {
                    conexion.Close();
                }
                return devolver;
            }
            public static ArrayList buscarPresupuesto(long idPresupuesto) {
                string consulta = "SELECT id_presupuesto, id_estado_presupuesto,id_revestimiento,precio_reves,id_piscina,fecha_estado,apellido,direccion,mail,nombre,localidad, telefono,precio_m2 FROM TB_PRESUPUESTO WHERE borrado=0 AND id_presupuesto="+idPresupuesto.ToString();
                ArrayList presupuesto;
                ArrayList dato = new ArrayList();
                conexion = new SqlConnection(strConexion);
                try
                {
                    SqlDataAdapter da = new SqlDataAdapter(consulta, conexion);
                    DataSet ds = new DataSet();

                    conexion.Open();
                    da.Fill(ds);

                    if (ds.Tables[0].Rows.Count>0)
                    {
                        presupuesto = new ArrayList();
                        presupuesto.Add(ds.Tables[0].Rows[0].ItemArray[0].ToString());
                        presupuesto.Add(ds.Tables[0].Rows[0].ItemArray[1].ToString());
                        presupuesto.Add(ds.Tables[0].Rows[0].ItemArray[2].ToString());
                        presupuesto.Add(ds.Tables[0].Rows[0].ItemArray[3].ToString());
                        presupuesto.Add(ds.Tables[0].Rows[0].ItemArray[4].ToString());
                        presupuesto.Add(ds.Tables[0].Rows[0].ItemArray[5].ToString());
                        presupuesto.Add(ds.Tables[0].Rows[0].ItemArray[6].ToString());
                        presupuesto.Add(ds.Tables[0].Rows[0].ItemArray[7].ToString());
                        presupuesto.Add(ds.Tables[0].Rows[0].ItemArray[8].ToString());
                        presupuesto.Add(ds.Tables[0].Rows[0].ItemArray[9].ToString());
                        presupuesto.Add(ds.Tables[0].Rows[0].ItemArray[10].ToString());
                        presupuesto.Add(ds.Tables[0].Rows[0].ItemArray[11].ToString());
                        presupuesto.Add(ds.Tables[0].Rows[0].ItemArray[12].ToString());
                        dato.Add(presupuesto);
                    }
                }
                catch (Exception ex)
                {
                    string error = ex.Message;
                }
                finally
                {
                    conexion.Close();
                }

                return dato;
            
            }
            public static ArrayList buscarPresupuestos()
            {
                string consulta = "SELECT id_presupuesto, id_estado_presupuesto,id_revestimiento,precio_reves,id_piscina,fecha_estado,apellido,direccion,mail,nombre,localidad, telefono,precio_m2 FROM TB_PRESUPUESTO where borrado=0";
                ArrayList presupuesto;
                ArrayList dato = new ArrayList();
                conexion = new SqlConnection(strConexion);
                try
                {
                    SqlDataAdapter da = new SqlDataAdapter(consulta, conexion);
                    DataSet ds = new DataSet();

                    conexion.Open();
                    da.Fill(ds);

                    for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                    {
                        presupuesto = new ArrayList();
                        presupuesto.Add(ds.Tables[0].Rows[i].ItemArray[0].ToString());
                        presupuesto.Add(ds.Tables[0].Rows[i].ItemArray[1].ToString());
                        presupuesto.Add(ds.Tables[0].Rows[i].ItemArray[2].ToString());
                        presupuesto.Add(ds.Tables[0].Rows[i].ItemArray[3].ToString());
                        presupuesto.Add(ds.Tables[0].Rows[i].ItemArray[4].ToString());
                        presupuesto.Add(ds.Tables[0].Rows[i].ItemArray[5].ToString());
                        presupuesto.Add(ds.Tables[0].Rows[i].ItemArray[6].ToString());
                        presupuesto.Add(ds.Tables[0].Rows[i].ItemArray[7].ToString());
                        presupuesto.Add(ds.Tables[0].Rows[i].ItemArray[8].ToString());
                        presupuesto.Add(ds.Tables[0].Rows[i].ItemArray[9].ToString());
                        presupuesto.Add(ds.Tables[0].Rows[i].ItemArray[10].ToString());
                        presupuesto.Add(ds.Tables[0].Rows[i].ItemArray[11].ToString());
                        presupuesto.Add(ds.Tables[0].Rows[i].ItemArray[12].ToString());
                        dato.Add(presupuesto);
                    }
                }
                catch (Exception ex)
                {
                    string error = ex.Message;
                }
                finally
                {
                    conexion.Close();
                }

                return dato;

            }
            public static ArrayList buscarEstados()
            {
                string consulta = "SELECT id_estado_presupuesto, descripcion FROM TB_ESTADO_PRESUPUESTO";

                ArrayList estado;
                ArrayList dato = new ArrayList();
                conexion = new SqlConnection(strConexion);
                try
                {
                    SqlDataAdapter da = new SqlDataAdapter(consulta, conexion);
                    DataSet ds = new DataSet();

                    conexion.Open();
                    da.Fill(ds);

                    for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                    {
                        estado = new ArrayList();
                        estado.Add(ds.Tables[0].Rows[i].ItemArray[0].ToString());
                        estado.Add(ds.Tables[0].Rows[i].ItemArray[1].ToString());
                        dato.Add(estado);
                    }
                }
                catch (Exception ex)
                {
                    string error = ex.Message;
                }
                finally
                {
                    conexion.Close();
                }

                return dato;

            }
            public static ArrayList buscarEstado(int pId)
            {

                string consulta = "SELECT id_estado_presupuesto,descripcion FROM TB_ESTADO_PRESUPUESTO WHERE id_estado_presupuesto=" + pId.ToString();

                ArrayList usu = new ArrayList();
                ArrayList dato = new ArrayList();
                conexion = new SqlConnection(strConexion);
                try
                {
                    conexion.Open();
                    SqlDataAdapter da = new SqlDataAdapter(consulta, conexion);
                    DataSet ds = new DataSet();
                    da.Fill(ds);
                    if (ds.Tables[0].Rows.Count > 0)
                    {
                        usu.Add(ds.Tables[0].Rows[0].ItemArray[0].ToString());
                        usu.Add(ds.Tables[0].Rows[0].ItemArray[1].ToString());
                        dato.Add(usu);
                    }
                }
                catch (Exception ex)
                {
                    string error = ex.Message;
                }
                finally
                {
                    conexion.Close();
                }

                return dato;

            }
            public static ArrayList buscarPiscina(int pId)
            {
                string consulta = "SELECT id_piscina,ancho,largo,profundidad,direccion,localidad FROM TB_PISCINA WHERE id_piscina=" + pId.ToString();
                ArrayList piscina = new ArrayList();
                ArrayList dato = new ArrayList();
                conexion = new SqlConnection(strConexion);
                try
                {
                    SqlDataAdapter da = new SqlDataAdapter(consulta, conexion);
                    DataSet ds = new DataSet();
                    conexion.Open();
                    da.Fill(ds);
                    if (ds.Tables[0].Rows.Count > 0)
                    {
                        piscina.Add(ds.Tables[0].Rows[0].ItemArray[0].ToString());
                        piscina.Add(ds.Tables[0].Rows[0].ItemArray[1].ToString());
                        piscina.Add(ds.Tables[0].Rows[0].ItemArray[2].ToString());
                        piscina.Add(ds.Tables[0].Rows[0].ItemArray[3].ToString());
                        piscina.Add(ds.Tables[0].Rows[0].ItemArray[4].ToString());
                        piscina.Add(ds.Tables[0].Rows[0].ItemArray[5].ToString());
                        dato.Add(piscina);
                    }
                }
                catch (Exception ex)
                {
                    string error = ex.Message;
                }
                finally
                {
                    conexion.Close();
                }

                return dato;

            }
            public static bool cambiarEstado(int pIdEstado,long idPresup) {

                bool devolver = false;
                string consulta = "UPDATE TB_PRESUPUESTO SET id_estado_presupuesto=" + pIdEstado + " WHERE id_presupuesto=" + idPresup;
                                      

                conexion = new SqlConnection(strConexion);
                SqlCommand cmd = new SqlCommand(consulta, conexion);
                try
                {
                    conexion.Open();
                    cmd.ExecuteNonQuery();
                    cmd.Dispose();
                    devolver = true;

                }
                catch (Exception ex)
                {
                    string error = ex.Message;
                }
                finally
                {
                    conexion.Close();
                }
                return devolver;
            
            }
            public static long registrarOT(int pIdCliente, long pIdPresup, DateTime pFechaIni, DateTime pFechaFin){

               long devolver = 0;
                conexion = new SqlConnection(strConexion);
                conexion.Open();
                SqlTransaction myTrans = conexion.BeginTransaction();
                SqlCommand cmd = conexion.CreateCommand();
           
                
                try
                {
                    int codOT = generarCodigo("id_orden_trabajo","TB_ORDEN_TRABAJO");

                    string insert = "INSERT INTO TB_ORDEN_TRABAJO (id_orden_trabajo, id_presupuesto, id_cliente, id_estado_ot, fecha_inicio) VALUES ("
                       + codOT + ","
                       + pIdPresup + ","
                       + pIdCliente + ","
                       + 1 +","
                       + "@fecha_inicial)";

                    cmd.CommandText = insert;

                    cmd.Parameters.Add(new SqlParameter("@fecha_inicial", SqlDbType.DateTime)).Value = pFechaIni;
                

                    cmd.Transaction = myTrans;
                    cmd.ExecuteNonQuery();


                    devolver = codOT;
                    myTrans.Commit();

                }
                catch (Exception ex)
                {
                    string error = ex.Message;
                    myTrans.Rollback();
                }
                finally
                {
                    conexion.Close();
                }
                return devolver;
            }
            public static ArrayList buscarOrdenesDeTrabajo()
            {
                string consulta = "SELECT id_orden_trabajo, id_presupuesto,id_estado_ot,id_cliente,fecha_inicio FROM TB_ORDEN_TRABAJO";
                ArrayList orden;
                ArrayList dato = new ArrayList();
                conexion = new SqlConnection(strConexion);
                try
                {
                    SqlDataAdapter da = new SqlDataAdapter(consulta, conexion);
                    DataSet ds = new DataSet();

                    conexion.Open();
                    da.Fill(ds);

                    for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                    {
                        orden = new ArrayList();
                        orden.Add(ds.Tables[0].Rows[i].ItemArray[0].ToString());
                        orden.Add(ds.Tables[0].Rows[i].ItemArray[1].ToString());
                        orden.Add(ds.Tables[0].Rows[i].ItemArray[2].ToString());
                        orden.Add(ds.Tables[0].Rows[i].ItemArray[3].ToString());
                        orden.Add(ds.Tables[0].Rows[i].ItemArray[4].ToString());
                     

                        dato.Add(orden);
                    }
                }
                catch (Exception ex)
                {
                    string error = ex.Message;
                }
                finally
                {
                    conexion.Close();
                }

                return dato;

            }

            /* buscamos las ordenes de trabajo que no esten asignadas a un contructor y cuyo estado sea pendiente*/
            public static ArrayList buscarOrdenesNoAsignadas()
            {
                string consulta = "SELECT id_orden_trabajo, id_presupuesto,id_estado_ot,id_cliente,fecha_inicio " +
                "FROM TB_ORDEN_TRABAJO WHERE id_estado_ot="+ (int)EstadoOTEnum.OT_PENDIENTE +" AND id_orden_trabajo NOT IN (SELECT id_orden_trabajo FROM TB_ASIGNACION) ";
                ArrayList orden;
                ArrayList dato = new ArrayList();
                conexion = new SqlConnection(strConexion);
                try
                {
                    SqlDataAdapter da = new SqlDataAdapter(consulta, conexion);
                    DataSet ds = new DataSet();

                    conexion.Open();
                    da.Fill(ds);

                    for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                    {
                        orden = new ArrayList();
                        orden.Add(ds.Tables[0].Rows[i].ItemArray[0].ToString());
                        orden.Add(ds.Tables[0].Rows[i].ItemArray[1].ToString());
                        orden.Add(ds.Tables[0].Rows[i].ItemArray[2].ToString());
                        orden.Add(ds.Tables[0].Rows[i].ItemArray[3].ToString());
                        orden.Add(ds.Tables[0].Rows[i].ItemArray[4].ToString());
                     

                        dato.Add(orden);
                    }
                }
                catch (Exception ex)
                {
                    string error = ex.Message;
                }
                finally
                {
                    conexion.Close();
                }

                return dato;

            }



            public static ArrayList buscarOrdenDeTrabajo(int pCodigo)
            {
                string consulta = "SELECT id_orden_trabajo, id_presupuesto,id_estado_ot,id_cliente,fecha_inicio FROM TB_ORDEN_TRABAJO WHERE id_orden_trabajo="+pCodigo;
                ArrayList orden;
                ArrayList dato = new ArrayList();
                conexion = new SqlConnection(strConexion);
                try
                {
                    SqlDataAdapter da = new SqlDataAdapter(consulta, conexion);
                    DataSet ds = new DataSet();

                    conexion.Open();
                    da.Fill(ds);

                    if(ds.Tables[0].Rows.Count > 0)
                    {
                        orden = new ArrayList();
                        orden.Add(ds.Tables[0].Rows[0].ItemArray[0].ToString());
                        orden.Add(ds.Tables[0].Rows[0].ItemArray[1].ToString());
                        orden.Add(ds.Tables[0].Rows[0].ItemArray[2].ToString());
                        orden.Add(ds.Tables[0].Rows[0].ItemArray[3].ToString());
                        orden.Add(ds.Tables[0].Rows[0].ItemArray[4].ToString());
             

                        dato.Add(orden);
                    }
                }
                catch (Exception ex)
                {
                    string error = ex.Message;
                }
                finally
                {
                    conexion.Close();
                }

                return dato;

            }

            public static bool eliminarPresupuesto(long id) {

                bool devolver = false;
                string consulta = "UPDATE TB_PRESUPUESTO SET borrado=1 WHERE id_presupuesto="+id;

                conexion = new SqlConnection(strConexion);
                SqlCommand cmd = new SqlCommand(consulta, conexion);
                try
                {
                    conexion.Open();
                    cmd.ExecuteNonQuery();
                    cmd.Dispose();
                    devolver = true;

                }
                catch (Exception ex)
                {
                    string error = ex.Message;
                }
                finally
                {
                    conexion.Close();
                }
                return devolver;
            }

            private static bool eliminarTerminaciones(long id,SqlCommand cmd)
            {

                bool devolver = false;
                string consulta = "DELETE FROM TB_TERMINACION_PRESUPUESTO WHERE id_presupuesto=" + id;


                cmd.CommandText = consulta;
                    cmd.ExecuteNonQuery();
                    devolver = true;

              
              
                return devolver;
            }

            private static bool eliminarAccesorios(long id, SqlCommand cmd)
            {

                bool devolver = false;
                string consulta = "DELETE FROM TB_ACCESORIO_PRESUPUESTO WHERE id_presupuesto=" + id;
                cmd.CommandText = consulta;
                cmd.ExecuteNonQuery();
                devolver = true;
                return devolver;
            }

            private static bool eliminarCategorias(long id,SqlCommand cmd)
            {
                bool devolver = false;
                string consulta = "DELETE FROM TB_CATEGORIA_PRESUPUESTO WHERE id_presupuesto=" + id;
                cmd.CommandText = consulta;
                cmd.ExecuteNonQuery();
                devolver = true;
                
               
                return devolver;
            }

           


            private static string modificarPiscina(ArrayList datos, long codPiscina, SqlCommand cmd)
            {
                string update = "UPDATE TB_PISCINA SET direccion=@direccionPiscina, localidad=@localidad, ancho=@ancho, largo=@largo, profundidad=@profundidad WHERE id_piscina=" + codPiscina;
                cmd.Parameters.Add(new SqlParameter("@direccionPiscina", SqlDbType.VarChar)).Value = datos[0].ToString().Trim();
                cmd.Parameters.Add(new SqlParameter("@localidad", SqlDbType.VarChar)).Value = datos[1].ToString().Trim();
                cmd.Parameters.Add(new SqlParameter("@ancho", SqlDbType.Float)).Value = Convert.ToDouble(datos[2].ToString().Trim());
                cmd.Parameters.Add(new SqlParameter("@largo", SqlDbType.Float)).Value = Convert.ToDouble(datos[3].ToString().Trim());
                cmd.Parameters.Add(new SqlParameter("@profundidad", SqlDbType.Float)).Value = Convert.ToDouble(datos[4].ToString().Trim());
                return update;
            }

            private static string modificarPresupuesto(ArrayList datos, long cod, SqlCommand cmd)
            {
                string consulta = "UPDATE TB_PRESUPUESTO SET id_estado_presupuesto=@id_estado_presupuesto,"+
                "id_revestimiento=@id_revestimiento,precio_reves=@precio_reves,fecha_estado=@fecha,"+
                "apellido=@apellido,direccion=@direccionPresup,mail=@mail,nombre=@nombre,localidad=@localidadPresup," + 
                "telefono=@telefono,precio_m2=@precio_m2 WHERE id_presupuesto=" + cod;

                cmd.Parameters.Add(new SqlParameter("@apellido", SqlDbType.VarChar)).Value = datos[0].ToString().Trim();
                cmd.Parameters.Add(new SqlParameter("@direccionPresup", SqlDbType.VarChar)).Value = datos[1].ToString().Trim();
                cmd.Parameters.Add(new SqlParameter("@mail", SqlDbType.VarChar)).Value = datos[2].ToString().Trim();
                cmd.Parameters.Add(new SqlParameter("@nombre", SqlDbType.VarChar)).Value = datos[3].ToString().Trim();
                cmd.Parameters.Add(new SqlParameter("@localidadPresup", SqlDbType.VarChar)).Value = datos[4].ToString().Trim();
                cmd.Parameters.Add(new SqlParameter("@telefono", SqlDbType.VarChar)).Value = datos[5].ToString().Trim();
                cmd.Parameters.Add(new SqlParameter("@precio_m2", SqlDbType.Float)).Value = Convert.ToDouble(datos[6].ToString().Trim());
                cmd.Parameters.Add(new SqlParameter("@id_estado_presupuesto", SqlDbType.Int)).Value = (int)PresupuestoEnum.PRESUPUESTO_PENDIENTE;
                cmd.Parameters.Add(new SqlParameter("@precio_reves", SqlDbType.Float)).Value = Convert.ToDouble(datos[11].ToString().Trim());
                cmd.Parameters.Add(new SqlParameter("@id_revestimiento", SqlDbType.Int)).Value = Convert.ToInt32(datos[12].ToString().Trim());
 
                return consulta;
            }

            public static bool actualizarPresupuesto(ArrayList datos, long id, int codPiscina)
            {


                bool devolver = false;
                conexion = new SqlConnection(strConexion);
                conexion.Open();
                SqlTransaction myTrans = conexion.BeginTransaction();
                SqlCommand cmd = conexion.CreateCommand();
                DateTime date = DateTime.Now;
                try
                {

                    SqlParameter fechaParam = new SqlParameter("@fecha", SqlDbType.DateTime);
                    cmd.Parameters.Add(fechaParam).Value=date;

                    cmd.CommandText = modificarPiscina((ArrayList)datos[7], codPiscina, cmd);
                    cmd.Transaction = myTrans;
                    cmd.ExecuteNonQuery();

                    cmd.CommandText = modificarPresupuesto(datos, id, cmd);
                    cmd.Transaction = myTrans;
                    cmd.ExecuteNonQuery();

                    eliminarTerminaciones(id, cmd);
                    foreach (int i in (ArrayList)datos[8])
                    {
                        cmd.CommandText = registrarTerminaciones(id, i, cmd);
                        cmd.Transaction = myTrans;
                        cmd.ExecuteNonQuery();
                    }

                    eliminarAccesorios(id, cmd);
                    foreach (KeyValuePair<int, int> i in (Dictionary<int, int>)datos[9])
                    {
                        cmd.CommandText = registrarAccesorios(id, i.Key, i.Value, cmd);
                        cmd.Transaction = myTrans;
                        cmd.ExecuteNonQuery();
                    }

                    eliminarCategorias(id, cmd);
                    foreach (KeyValuePair<int, int> i in (Dictionary<int, int>)datos[10])
                    {
                        cmd.CommandText = registrarCategorias(id, i.Key, i.Value, cmd);
                        cmd.Transaction = myTrans;
                        cmd.ExecuteNonQuery();
                    }

       
                    myTrans.Commit();
                    devolver = true;

                }
                catch (Exception ex)
                {
                    string error = ex.Message;
                    myTrans.Rollback();
                }
                finally
                {
                    conexion.Close();
                }
                return devolver;
            }

            public static ArrayList buscarEstadoOT(int pId)
            {

                string consulta = "SELECT id_estado_ot,descripcion FROM TB_ESTADO_ORDEN_TRABAJO WHERE id_estado_ot=" + pId.ToString();

                ArrayList usu = new ArrayList();
                ArrayList dato = new ArrayList();
                conexion = new SqlConnection(strConexion);
                try
                {
                    conexion.Open();
                    SqlDataAdapter da = new SqlDataAdapter(consulta, conexion);
                    DataSet ds = new DataSet();
                    da.Fill(ds);
                    if (ds.Tables[0].Rows.Count > 0)
                    {
                        usu.Add(ds.Tables[0].Rows[0].ItemArray[0].ToString());
                        usu.Add(ds.Tables[0].Rows[0].ItemArray[1].ToString());
                        dato.Add(usu);
                    }
                }
                catch (Exception ex)
                {
                    string error = ex.Message;
                }
                finally
                {
                    conexion.Close();
                }

                return dato;

            }
            public static ArrayList buscarEtapa(int pId)
            {

                string consulta = "SELECT id_etapa,descripcion FROM TB_ETAPA WHERE id_etapa=" + pId.ToString();

                ArrayList etapa = new ArrayList();
                ArrayList dato = new ArrayList();
                conexion = new SqlConnection(strConexion);
                try
                {
                    conexion.Open();
                    SqlDataAdapter da = new SqlDataAdapter(consulta, conexion);
                    DataSet ds = new DataSet();
                    da.Fill(ds);
                    if (ds.Tables[0].Rows.Count > 0)
                    {
                        etapa.Add(ds.Tables[0].Rows[0].ItemArray[0].ToString());
                        etapa.Add(ds.Tables[0].Rows[0].ItemArray[1].ToString());
                        dato.Add(etapa);
                    }
                }
                catch (Exception ex)
                {
                    string error = ex.Message;
                }
                finally
                {
                    conexion.Close();
                }

                return dato;

            }
            public static ArrayList buscarEtapas()
            {

                string consulta = "SELECT id_etapa,descripcion FROM TB_ETAPA";

                ArrayList etapa;
                ArrayList dato = new ArrayList();
                conexion = new SqlConnection(strConexion);
                try
                {
                    conexion.Open();
                    SqlDataAdapter da = new SqlDataAdapter(consulta, conexion);
                    DataSet ds = new DataSet();
                    da.Fill(ds);
                    for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                    {
                        etapa = new ArrayList();
                        etapa.Add(ds.Tables[0].Rows[i].ItemArray[0].ToString());
                        etapa.Add(ds.Tables[0].Rows[i].ItemArray[1].ToString());
                        dato.Add(etapa);
                    }
                }
                catch (Exception ex)
                {
                    string error = ex.Message;
                }
                finally
                {
                    conexion.Close();
                }

                return dato;

            }






            public static ArrayList buscarHerramienta(int pId)
            {

                string consulta = "SELECT id_herramienta,descripcion FROM TB_HERRAMIENTA WHERE id_herramienta=" + pId.ToString();

                ArrayList usu = new ArrayList();
                ArrayList dato = new ArrayList();
                conexion = new SqlConnection(strConexion);
                try
                {
                    conexion.Open();
                    SqlDataAdapter da = new SqlDataAdapter(consulta, conexion);
                    DataSet ds = new DataSet();
                    da.Fill(ds);
                    if (ds.Tables[0].Rows.Count > 0)
                    {
                        usu.Add(ds.Tables[0].Rows[0].ItemArray[0].ToString());
                        usu.Add(ds.Tables[0].Rows[0].ItemArray[1].ToString());
                        dato.Add(usu);
                    }
                }
                catch (Exception ex)
                {
                    string error = ex.Message;
                }
                finally
                {
                    conexion.Close();
                }

                return dato;

            }
            public static ArrayList buscarHerramientas()
            {

                string consulta = "SELECT id_herramienta,descripcion FROM TB_HERRAMIENTA";

                ArrayList herramienta;
                ArrayList dato = new ArrayList();
                conexion = new SqlConnection(strConexion);
                try
                {
                    conexion.Open();
                    SqlDataAdapter da = new SqlDataAdapter(consulta, conexion);
                    DataSet ds = new DataSet();
                    da.Fill(ds);
                    for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                    {
                        herramienta = new ArrayList();
                        herramienta.Add(ds.Tables[0].Rows[i].ItemArray[0].ToString());
                        herramienta.Add(ds.Tables[0].Rows[i].ItemArray[1].ToString());
                        dato.Add(herramienta);
                    }
                }
                catch (Exception ex)
                {
                    string error = ex.Message;
                }
                finally
                {
                    conexion.Close();
                }

                return dato;

            }
            public static ArrayList buscarObrero(int pId)
            {

                string consulta = "SELECT id_obrero,id_categoria,apellido,nombre,direccion,localidad,telefono,cuit FROM TB_OBRERO WHERE id_obrero="+pId.ToString();

                ArrayList obr = new ArrayList();
                ArrayList dato = new ArrayList();
                conexion = new SqlConnection(strConexion);
                try
                {
                    conexion.Open();
                    SqlDataAdapter da = new SqlDataAdapter(consulta, conexion);
                    DataSet ds = new DataSet();
                    da.Fill(ds);
                    if (ds.Tables[0].Rows.Count > 0)
                    {
                        obr.Add(ds.Tables[0].Rows[0].ItemArray[0].ToString());
                        obr.Add(ds.Tables[0].Rows[0].ItemArray[1].ToString());
                        obr.Add(ds.Tables[0].Rows[0].ItemArray[2].ToString());
                        obr.Add(ds.Tables[0].Rows[0].ItemArray[3].ToString());
                        obr.Add(ds.Tables[0].Rows[0].ItemArray[4].ToString());
                        obr.Add(ds.Tables[0].Rows[0].ItemArray[5].ToString());
                        obr.Add(ds.Tables[0].Rows[0].ItemArray[6].ToString());
                        obr.Add(ds.Tables[0].Rows[0].ItemArray[7].ToString());
                        dato.Add(obr);
                    }
                }
                catch (Exception ex)
                {
                    string error = ex.Message;
                }
                finally
                {
                    conexion.Close();
                }

                return dato;

            }
            public static ArrayList buscarObreros()
            {

                string consulta = "SELECT id_obrero,id_categoria,apellido,nombre,direccion,localidad,telefono,cuit FROM TB_OBRERO";

                ArrayList obr;
                ArrayList dato = new ArrayList();
                conexion = new SqlConnection(strConexion);
                try
                {
                    conexion.Open();
                    SqlDataAdapter da = new SqlDataAdapter(consulta, conexion);
                    DataSet ds = new DataSet();
                    da.Fill(ds);
                    for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                    {
                        obr = new ArrayList();
                        obr.Add(ds.Tables[0].Rows[i].ItemArray[0].ToString());
                        obr.Add(ds.Tables[0].Rows[i].ItemArray[1].ToString());
                        obr.Add(ds.Tables[0].Rows[i].ItemArray[2].ToString());
                        obr.Add(ds.Tables[0].Rows[i].ItemArray[3].ToString());
                        obr.Add(ds.Tables[0].Rows[i].ItemArray[4].ToString());
                        obr.Add(ds.Tables[0].Rows[i].ItemArray[5].ToString());
                        obr.Add(ds.Tables[0].Rows[i].ItemArray[6].ToString());
                        obr.Add(ds.Tables[0].Rows[i].ItemArray[7].ToString());
                        dato.Add(obr);
                    }
                }
                catch (Exception ex)
                {
                    string error = ex.Message;
                }
                finally
                {
                    conexion.Close();
                }

                return dato;

            }
            public static ArrayList buscarCategoriaObrero(int pId)
            {

                string consulta = "SELECT id_categoria,jornal,descripcion FROM TB_CATEGORIA WHERE id_categoria=" + pId.ToString();

                ArrayList usu = new ArrayList();
                ArrayList dato = new ArrayList();
                conexion = new SqlConnection(strConexion);
                try
                {
                    conexion.Open();
                    SqlDataAdapter da = new SqlDataAdapter(consulta, conexion);
                    DataSet ds = new DataSet();
                    da.Fill(ds);
                    if (ds.Tables[0].Rows.Count > 0)
                    {
                        usu.Add(ds.Tables[0].Rows[0].ItemArray[0].ToString());
                        usu.Add(ds.Tables[0].Rows[0].ItemArray[1].ToString());
                        usu.Add(ds.Tables[0].Rows[0].ItemArray[2].ToString());
                        dato.Add(usu);
                    }
                }
                catch (Exception ex)
                {
                    string error = ex.Message;
                }
                finally
                {
                    conexion.Close();
                }

                return dato;

            }
            public static ArrayList buscarCategoriasObrero()
            {

                string consulta = "SELECT id_categoria,jornal,descripcion FROM TB_CATEGORIA";

                ArrayList obr;
                ArrayList dato = new ArrayList();
                conexion = new SqlConnection(strConexion);
                try
                {
                    conexion.Open();
                    SqlDataAdapter da = new SqlDataAdapter(consulta, conexion);
                    DataSet ds = new DataSet();
                    da.Fill(ds);
                    for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                    {
                        obr = new ArrayList();
                        obr.Add(ds.Tables[0].Rows[i].ItemArray[0].ToString());
                        obr.Add(ds.Tables[0].Rows[i].ItemArray[1].ToString());
                        obr.Add(ds.Tables[0].Rows[i].ItemArray[1].ToString());
                        dato.Add(obr);
                    }
                }
                catch (Exception ex)
                {
                    string error = ex.Message;
                }
                finally
                {
                    conexion.Close();
                }

                return dato;

            }
            public static ArrayList buscarEtapasDeOT(int pOt)
            {

                string consulta = "SELECT id_etapa_obra,id_etapa,id_orden_trabajo,fecha_inicio,fecha_fin,fecha_inicio_real,fecha_fin_real FROM TB_ETAPA_OBRA WHERE id_orden_trabajo=" + pOt;

                ArrayList etapa;
                ArrayList dato = new ArrayList();
                conexion = new SqlConnection(strConexion);
                try
                {
                    conexion.Open();
                    SqlDataAdapter da = new SqlDataAdapter(consulta, conexion);
                    DataSet ds = new DataSet();
                    da.Fill(ds);
                    for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                    {
                        etapa = new ArrayList();
                        etapa.Add(ds.Tables[0].Rows[i].ItemArray[0].ToString());
                        etapa.Add(ds.Tables[0].Rows[i].ItemArray[1].ToString());
                        etapa.Add(ds.Tables[0].Rows[i].ItemArray[2].ToString());
                        etapa.Add(ds.Tables[0].Rows[i].ItemArray[3].ToString());
                        etapa.Add(ds.Tables[0].Rows[i].ItemArray[4].ToString());
                        etapa.Add(ds.Tables[0].Rows[i].ItemArray[5].ToString());
                        etapa.Add(ds.Tables[0].Rows[i].ItemArray[6].ToString());
                        dato.Add(etapa);
                    }
                }
                catch (Exception ex)
                {
                    string error = ex.Message;
                }
                finally
                {
                    conexion.Close();
                }

                return dato;

            }



            public static ArrayList buscarConstructoresLibres()
            {
                string consulta = "SELECT DISTINCT nro_doc,nombre,apellido,email,celular,id_constructor,id_tipo FROM TB_CONSTRUCTOR  " +
                "WHERE id_constructor NOT IN (SELECT c.id_constructor FROM TB_ASIGNACION a,TB_ORDEN_TRABAJO ot,TB_CONSTRUCTOR c " +
                " WHERE  ot.id_estado_ot="+(int)EstadoOTEnum.OT_TERMINADA+" AND  a.id_constructor=c.id_constructor and a.id_orden_trabajo=ot.id_orden_trabajo)";

                ArrayList con;
                ArrayList dato = new ArrayList();
                conexion = new SqlConnection(strConexion);
                try
                {
                    conexion.Open();
                    SqlDataAdapter da = new SqlDataAdapter(consulta, conexion);
                    DataSet ds = new DataSet();
                    da.Fill(ds);
                    for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                    {
                        con = new ArrayList();
                        con.Add(ds.Tables[0].Rows[i].ItemArray[0].ToString());
                        con.Add(ds.Tables[0].Rows[i].ItemArray[1].ToString());
                        con.Add(ds.Tables[0].Rows[i].ItemArray[2].ToString());
                        con.Add(ds.Tables[0].Rows[i].ItemArray[3].ToString());
                        con.Add(ds.Tables[0].Rows[i].ItemArray[4].ToString());
                        con.Add(ds.Tables[0].Rows[i].ItemArray[5].ToString());
                        con.Add(ds.Tables[0].Rows[i].ItemArray[6].ToString());
                        dato.Add(con);
                    }
                }
                catch (Exception ex)
                {
                    string error = ex.Message;
                }
                finally
                {
                    conexion.Close();
                }

                return dato;

            }


            public static int registrarEtapa(int pEtapa, int pOrden,DateTime pFechaInicio, DateTime pFechaFin)
            {
                int devolver = 0;
                conexion = new SqlConnection(strConexion);
                conexion.Open();
                SqlTransaction myTrans = conexion.BeginTransaction();
                SqlCommand cmd = conexion.CreateCommand();
                string date = DateTime.Now.ToShortDateString();
                try
                {
                    int codEtapa = generarCodigo("id_etapa_obra","TB_ETAPA_OBRA");

                    string insert = "INSERT INTO TB_ETAPA_OBRA (id_etapa_obra, id_etapa, id_orden_trabajo,fecha_inicio, fecha_fin) VALUES ("
                       + codEtapa + ","
                       + pEtapa + ","
                       + pOrden + ","
                       + "@fecha_inicial, "
                       + "@fecha_final)";

                    cmd.CommandText = insert;

                    cmd.Parameters.Add(new SqlParameter("@fecha_inicial", SqlDbType.DateTime)).Value = pFechaInicio;
                    cmd.Parameters.Add(new SqlParameter("@fecha_final", SqlDbType.DateTime)).Value = pFechaFin;

                    cmd.Transaction = myTrans;
                    cmd.ExecuteNonQuery();


                    devolver = codEtapa;
                    myTrans.Commit();

                }
                catch (Exception ex)
                {
                    string error = ex.Message;
                    myTrans.Rollback();
                }
                finally
                {
                    conexion.Close();
                }
                return devolver;
            }
            public static void registrarObrero(int pIdEtapaObra, int pIdObrero)
            {
                conexion = new SqlConnection(strConexion);
                conexion.Open();
                SqlTransaction myTrans = conexion.BeginTransaction();
                SqlCommand cmd = conexion.CreateCommand();
                string date = DateTime.Now.ToShortDateString();
                try
                {
                    string insert = "INSERT INTO TB_ASIGNACION_OBRERO (id_etapa_obra, id_obrero) VALUES ("
                       + pIdEtapaObra + ","
                       + pIdObrero + ")";

                    cmd.CommandText = insert;
                    cmd.Transaction = myTrans;
                    cmd.ExecuteNonQuery();
                    myTrans.Commit();

                }
                catch (Exception ex)
                {
                    myTrans.Rollback();
                    throw ex;
                  
                }
                finally
                {
                    conexion.Close();
                }
              
            }
            public static void registrarHerramienta(int pIdEtapaObra, int pIdHerramienta, int pCantidad)
            {
                conexion = new SqlConnection(strConexion);
                conexion.Open();
                SqlTransaction myTrans = conexion.BeginTransaction();
                SqlCommand cmd = conexion.CreateCommand();
                string date = DateTime.Now.ToShortDateString();
                try
                {
                    string insert = "INSERT INTO TB_ASIGNACION_HERRAMIENTA (id_etapa_obra,cantidad, id_herramienta) VALUES ("
                       + pIdEtapaObra + ","
                       + pCantidad + ","
                       + pIdHerramienta + ")";

                    cmd.CommandText = insert;
                    cmd.Transaction = myTrans;
                    cmd.ExecuteNonQuery();
                    myTrans.Commit();

                }
                catch (Exception ex)
                {
                    myTrans.Rollback();
                    throw ex;

                }
                finally
                {
                    conexion.Close();
                }

            }

        #endregion

        #region Login
            public static ArrayList ingresarSistema(int idTipo, string pNro_doc, string pPass)
        {
            ArrayList  dato = new ArrayList();
            string consulta = "SELECT nro_doc,nombre,apellido,mail,telefono,id_perfil,cambia_pass,pass,id_tipo "
            +"FROM TB_USUARIO WHERE id_tipo="+idTipo+" and nro_doc='" + pNro_doc + "' AND PASS='" + pPass + "'";
            conexion = new SqlConnection(strConexion);
            try
            {
                conexion.Open();
                SqlDataAdapter da = new SqlDataAdapter(consulta, conexion);
                DataSet ds = new DataSet();
                da.Fill(ds);
                if (ds.Tables[0].Rows.Count > 0)
                {
                   
                    ArrayList usu = new ArrayList();
                    usu.Add(ds.Tables[0].Rows[0].ItemArray[0].ToString());
                    usu.Add(ds.Tables[0].Rows[0].ItemArray[1].ToString());
                    usu.Add(ds.Tables[0].Rows[0].ItemArray[2].ToString());
                    usu.Add(ds.Tables[0].Rows[0].ItemArray[3].ToString());
                    usu.Add(ds.Tables[0].Rows[0].ItemArray[4].ToString());
                    usu.Add(ds.Tables[0].Rows[0].ItemArray[5].ToString());
                    usu.Add(ds.Tables[0].Rows[0].ItemArray[6].ToString());
                    usu.Add(ds.Tables[0].Rows[0].ItemArray[7].ToString());
                    usu.Add(ds.Tables[0].Rows[0].ItemArray[8].ToString());
                    dato.Add(usu);
                }
            }
            catch (Exception ex)
            {
                string error = ex.Message;
            }
            finally
            {
                conexion.Close();
            }

            return dato;
        }
            public static bool cambiarClave(string pNro_doc,string pClaveNueva)
        { 
            bool devolver = false;
            string consulta = "UPDATE TB_USUARIO SET cambia_pass=0,pass='" + pClaveNueva + "'" + " WHERE nro_doc='" + pNro_doc+"'";
            conexion = new SqlConnection(strConexion);
            SqlCommand cmd = new SqlCommand(consulta, conexion);
            try
            {
                conexion.Open();
                cmd.ExecuteNonQuery();
                cmd.Dispose();
                devolver = true;

            }
            catch (Exception ex)
            {
                string error = ex.Message;
            }
            finally
            {
                conexion.Close();
            }
            return devolver;
        }
        #endregion

            public static ArrayList buscarAsignacionesEnCurso(int pIdConstructor)
            {
                string consulta = "SELECT id_asignacion, id_constructor,id_orden_trabajo, fecha_creacion,finalizado FROM TB_ASIGNACION WHERE finalizado = 0 AND id_constructor =" + pIdConstructor;

                ArrayList obr;
                ArrayList dato = new ArrayList();
                conexion = new SqlConnection(strConexion);
                try
                {
                    conexion.Open();
                    SqlDataAdapter da = new SqlDataAdapter(consulta, conexion);
                    DataSet ds = new DataSet();
                    da.Fill(ds);
                    for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                    {
                        obr = new ArrayList();
                        obr.Add(ds.Tables[0].Rows[i].ItemArray[0].ToString());
                        obr.Add(ds.Tables[0].Rows[i].ItemArray[1].ToString());
                        obr.Add(ds.Tables[0].Rows[i].ItemArray[2].ToString());
                        obr.Add(ds.Tables[0].Rows[i].ItemArray[3].ToString());
                        obr.Add(ds.Tables[0].Rows[i].ItemArray[4].ToString());
                        dato.Add(obr);
                    }
                }
                catch (Exception ex)
                {
                    string error = ex.Message;
                }
                finally
                {
                    conexion.Close();
                }

                return dato;
            }

            public static ArrayList buscarTodasLasAsignaciones(int pIdConstructor)
            {
                string consulta = "SELECT id_asignacion, id_constructor,id_orden_trabajo, fecha_creacion,finalizado FROM TB_ASIGNACION WHERE id_constructor =" + pIdConstructor;

                ArrayList obr;
                ArrayList dato = new ArrayList();
                conexion = new SqlConnection(strConexion);
                try
                {
                    conexion.Open();
                    SqlDataAdapter da = new SqlDataAdapter(consulta, conexion);
                    DataSet ds = new DataSet();
                    da.Fill(ds);
                    for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                    {
                        obr = new ArrayList();
                        obr.Add(ds.Tables[0].Rows[i].ItemArray[0].ToString());
                        obr.Add(ds.Tables[0].Rows[i].ItemArray[1].ToString());
                        obr.Add(ds.Tables[0].Rows[i].ItemArray[2].ToString());
                        obr.Add(ds.Tables[0].Rows[i].ItemArray[3].ToString());
                        obr.Add(ds.Tables[0].Rows[i].ItemArray[4].ToString());
                        dato.Add(obr);
                    }
                }
                catch (Exception ex)
                {
                    string error = ex.Message;
                }
                finally
                {
                    conexion.Close();
                }

                return dato;
            }

            public static ArrayList buscarAsignacionesEnCurso()
            {
                string consulta = "SELECT a.id_asignacion, a.id_constructor,a.id_orden_trabajo, a.fecha_creacion,finalizado FROM TB_ASIGNACION a, TB_ORDEN_TRABAJO ot WHERE ot.id_orden_trabajo=a.id_orden_trabajo AND ot.id_estado_ot<>"+(int)EstadoOTEnum.OT_TERMINADA;

                ArrayList obr;
                ArrayList dato = new ArrayList();
                conexion = new SqlConnection(strConexion);
                try
                {
                    conexion.Open();
                    SqlDataAdapter da = new SqlDataAdapter(consulta, conexion);
                    DataSet ds = new DataSet();
                    da.Fill(ds);
                    for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                    {
                        obr = new ArrayList();
                        obr.Add(ds.Tables[0].Rows[i].ItemArray[0].ToString());
                        obr.Add(ds.Tables[0].Rows[i].ItemArray[1].ToString());
                        obr.Add(ds.Tables[0].Rows[i].ItemArray[2].ToString());
                        obr.Add(ds.Tables[0].Rows[i].ItemArray[3].ToString());
                        obr.Add(ds.Tables[0].Rows[i].ItemArray[4].ToString());
                        dato.Add(obr);
                    }
                }
                catch (Exception ex)
                {
                    string error = ex.Message;
                }
                finally
                {
                    conexion.Close();
                }

                return dato;
            }

            public static int registrarAsignacion(int pIdConstructor, int pIdOrdenTrabajo)
            {
                conexion = new SqlConnection(strConexion);
                conexion.Open();
                SqlTransaction myTrans = conexion.BeginTransaction();
                SqlCommand cmd = conexion.CreateCommand();
                int codigo =0;
                try
                {
                    codigo = generarCodigo("id_asignacion","TB_ASIGNACION");
                    

                    string insert = "INSERT INTO TB_ASIGNACION (id_asignacion, id_constructor, id_orden_trabajo, fecha_creacion, finalizado) VALUES ("
                        + codigo + ","
                        + pIdConstructor + ","
                        + pIdOrdenTrabajo + ","
                        + "@fecha," 
                        + "0)";
                    cmd.Parameters.Add(new SqlParameter("@fecha", SqlDbType.DateTime)).Value = DateTime.Now;
                   
                    cmd.CommandText = insert;
                    cmd.Transaction = myTrans;
                    cmd.ExecuteNonQuery();
                    myTrans.Commit();

                }
                catch (Exception ex)
                {
                    myTrans.Rollback();
                    throw ex;

                }
                finally
                {
                    conexion.Close();
                }
                return codigo;
            }

            public static ArrayList buscarCliente(string pTipo, string pNroDoc)
            {
                string consulta = "SELECT c.nro_doc,c.nombre,c.apellido,c.direccion,c.localidad,c.email,c.telefono,c.id_cliente,c.id_tipo FROM TB_CLIENTE c,TB_TIPO t WHERE c.id_tipo=t.id_tipo AND c.nro_doc='" + pNroDoc + "' AND t.nombre='"+pTipo+"'";
                ArrayList registro = new ArrayList();
                ArrayList registros = new ArrayList();
                conexion = new SqlConnection(strConexion);
                try
                {
                    SqlDataAdapter da = new SqlDataAdapter(consulta, conexion);
                    DataSet ds = new DataSet();

                    conexion.Open();
                    da.Fill(ds);
                    if (ds.Tables[0].Rows.Count > 0)
                    {
                        registro.Add(ds.Tables[0].Rows[0].ItemArray[0].ToString());
                        registro.Add(ds.Tables[0].Rows[0].ItemArray[1].ToString());
                        registro.Add(ds.Tables[0].Rows[0].ItemArray[2].ToString());
                        registro.Add(ds.Tables[0].Rows[0].ItemArray[3].ToString());
                        registro.Add(ds.Tables[0].Rows[0].ItemArray[4].ToString());
                        registro.Add(ds.Tables[0].Rows[0].ItemArray[5].ToString());
                        registro.Add(ds.Tables[0].Rows[0].ItemArray[6].ToString());
                        registro.Add(ds.Tables[0].Rows[0].ItemArray[7].ToString());
                        registro.Add(ds.Tables[0].Rows[0].ItemArray[8].ToString());
                        registros.Add(registro);
                    }
                }
                catch (Exception ex)
                {
                    string error = ex.Message;
                }
                finally
                {
                    conexion.Close();
                }

                return registros;
            }

            public static ArrayList buscarClientes()
            {

                string consulta = "SELECT nro_doc,nombre,apellido,direccion,localidad,email,telefono,id_cliente,id_tipo FROM TB_CLIENTE";

                ArrayList cli;
                ArrayList dato = new ArrayList();
                conexion = new SqlConnection(strConexion);
                try
                {
                    conexion.Open();
                    SqlDataAdapter da = new SqlDataAdapter(consulta, conexion);
                    DataSet ds = new DataSet();
                    da.Fill(ds);
                    for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                    {
                        cli = new ArrayList();
                        cli.Add(ds.Tables[0].Rows[i].ItemArray[0].ToString());
                        cli.Add(ds.Tables[0].Rows[i].ItemArray[1].ToString());
                        cli.Add(ds.Tables[0].Rows[i].ItemArray[2].ToString());
                        cli.Add(ds.Tables[0].Rows[i].ItemArray[3].ToString());
                        cli.Add(ds.Tables[0].Rows[i].ItemArray[4].ToString());
                        cli.Add(ds.Tables[0].Rows[i].ItemArray[5].ToString());
                        cli.Add(ds.Tables[0].Rows[i].ItemArray[6].ToString());
                        cli.Add(ds.Tables[0].Rows[i].ItemArray[7].ToString());
                        cli.Add(ds.Tables[0].Rows[i].ItemArray[8].ToString());
                        dato.Add(cli);
                    }
                }
                catch (Exception ex)
                {
                    string error = ex.Message;
                }
                finally
                {
                    conexion.Close();
                }

                return dato;
            }

            public static ArrayList buscarConstructores()
            {
                string consulta = "SELECT nro_doc,nombre,apellido,email,celular,id_constructor,id_tipo FROM TB_CONSTRUCTOR";

                ArrayList con;
                ArrayList dato = new ArrayList();
                conexion = new SqlConnection(strConexion);
                try
                {
                    conexion.Open();
                    SqlDataAdapter da = new SqlDataAdapter(consulta, conexion);
                    DataSet ds = new DataSet();
                    da.Fill(ds);
                    for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                    {
                        con = new ArrayList();
                        con.Add(ds.Tables[0].Rows[i].ItemArray[0].ToString());
                        con.Add(ds.Tables[0].Rows[i].ItemArray[1].ToString());
                        con.Add(ds.Tables[0].Rows[i].ItemArray[2].ToString());
                        con.Add(ds.Tables[0].Rows[i].ItemArray[3].ToString());
                        con.Add(ds.Tables[0].Rows[i].ItemArray[4].ToString());
                        con.Add(ds.Tables[0].Rows[i].ItemArray[5].ToString());
                        con.Add(ds.Tables[0].Rows[i].ItemArray[6].ToString());
                        dato.Add(con);
                    }
                }
                catch (Exception ex)
                {
                    string error = ex.Message;
                }
                finally
                {
                    conexion.Close();
                }

                return dato;
            }

            public static ArrayList buscarConstructor(int pTipo, string pNroDoc)
            {
                string consulta = "SELECT nro_doc,nombre,apellido,email,celular,id_constructor,id_tipo FROM TB_CONSTRUCTOR WHERE nro_doc='" + pNroDoc + "' AND id_tipo="+pTipo;
                ArrayList registro = new ArrayList();
                ArrayList registros = new ArrayList();
                conexion = new SqlConnection(strConexion);
                try
                {
                    SqlDataAdapter da = new SqlDataAdapter(consulta, conexion);
                    DataSet ds = new DataSet();

                    conexion.Open();
                    da.Fill(ds);

                    if (ds.Tables[0].Rows.Count > 0)
                    {
                        registro.Add(ds.Tables[0].Rows[0].ItemArray[0].ToString());
                        registro.Add(ds.Tables[0].Rows[0].ItemArray[1].ToString());
                        registro.Add(ds.Tables[0].Rows[0].ItemArray[2].ToString());
                        registro.Add(ds.Tables[0].Rows[0].ItemArray[3].ToString());
                        registro.Add(ds.Tables[0].Rows[0].ItemArray[4].ToString());
                        registro.Add(ds.Tables[0].Rows[0].ItemArray[5].ToString());
                        registro.Add(ds.Tables[0].Rows[0].ItemArray[6].ToString());
                        registros.Add(registro);
                    }
                }
                catch (Exception ex)
                {
                    string error = ex.Message;
                }
                finally
                {
                    conexion.Close();
                }

                return registros;
            }

            public static ArrayList buscarTipoDoc(int pCodigo)
            {
                string consulta = "SELECT id_tipo,nombre FROM TB_TIPO WHERE id_tipo="+pCodigo;

                ArrayList obr;
                ArrayList dato = new ArrayList();
                conexion = new SqlConnection(strConexion);
                try
                {
                    conexion.Open();
                    SqlDataAdapter da = new SqlDataAdapter(consulta, conexion);
                    DataSet ds = new DataSet();
                    da.Fill(ds);
                    for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                    {
                        obr = new ArrayList();
                        obr.Add(ds.Tables[0].Rows[i].ItemArray[0].ToString());
                        obr.Add(ds.Tables[0].Rows[i].ItemArray[1].ToString());
                        dato.Add(obr);
                    }
                }
                catch (Exception ex)
                {
                    string error = ex.Message;
                }
                finally
                {
                    conexion.Close();
                }

                return dato;
            }

            public static ArrayList buscarUsuarios()
            {
                ArrayList dato = new ArrayList();
                string consulta = "SELECT nro_doc,nombre,apellido,mail,telefono,id_perfil,cambia_pass,pass,id_tipo "
                + "FROM TB_USUARIO ";
                conexion = new SqlConnection(strConexion);
                try
                {
                    conexion.Open();
                    SqlDataAdapter da = new SqlDataAdapter(consulta, conexion);
                    DataSet ds = new DataSet();
                    da.Fill(ds);
                    for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                    {

                        ArrayList usu = new ArrayList();
                        usu.Add(ds.Tables[0].Rows[i].ItemArray[0].ToString());
                        usu.Add(ds.Tables[0].Rows[i].ItemArray[1].ToString());
                        usu.Add(ds.Tables[0].Rows[i].ItemArray[2].ToString());
                        usu.Add(ds.Tables[0].Rows[i].ItemArray[3].ToString());
                        usu.Add(ds.Tables[0].Rows[i].ItemArray[4].ToString());
                        usu.Add(ds.Tables[0].Rows[i].ItemArray[5].ToString());
                        usu.Add(ds.Tables[0].Rows[i].ItemArray[6].ToString());
                        usu.Add(ds.Tables[0].Rows[i].ItemArray[7].ToString());
                        usu.Add(ds.Tables[0].Rows[i].ItemArray[8].ToString());
                        dato.Add(usu);
                    }
                }
                catch (Exception ex)
                {
                    string error = ex.Message;
                }
                finally
                {
                    conexion.Close();
                }

                return dato;
            }

            public static ArrayList buscarUsuario(string pTipo, string pNroDoc)
            {
                string consulta = "SELECT u.nro_doc,u.nombre,u.apellido,u.mail,u.telefono,u.id_perfil, u.cambia_pass,u.pass,u.id_tipo FROM TB_USUARIO u,TB_TIPO t WHERE u.id_tipo=t.id_tipo AND u.nro_doc='" + pNroDoc + "' AND t.nombre='"+pTipo+"'";
                ArrayList registro = new ArrayList();
                ArrayList registros = new ArrayList();
                conexion = new SqlConnection(strConexion);
                try
                {
                    SqlDataAdapter da = new SqlDataAdapter(consulta, conexion);
                    DataSet ds = new DataSet();

                    conexion.Open();
                    da.Fill(ds);

                    if (ds.Tables[0].Rows.Count > 0)
                    {
                        registro.Add(ds.Tables[0].Rows[0].ItemArray[0].ToString());
                        registro.Add(ds.Tables[0].Rows[0].ItemArray[1].ToString());
                        registro.Add(ds.Tables[0].Rows[0].ItemArray[2].ToString());
                        registro.Add(ds.Tables[0].Rows[0].ItemArray[3].ToString());
                        registro.Add(ds.Tables[0].Rows[0].ItemArray[4].ToString());
                        registro.Add(ds.Tables[0].Rows[0].ItemArray[5].ToString());
                        registro.Add(ds.Tables[0].Rows[0].ItemArray[6].ToString());
                        registro.Add(ds.Tables[0].Rows[0].ItemArray[7].ToString());
                        registro.Add(ds.Tables[0].Rows[0].ItemArray[8].ToString());
                        registros.Add(registro);
                    }
                }
                catch (Exception ex)
                {
                    string error = ex.Message;
                }
                finally
                {
                    conexion.Close();
                }

                return registros;
            }

            public static ArrayList buscarTiposDoc()
            {
                string consulta = "SELECT id_tipo,nombre FROM TB_TIPO ";

                ArrayList tipodoc;
                ArrayList dato = new ArrayList();
                conexion = new SqlConnection(strConexion);
                try
                {
                    conexion.Open();
                    SqlDataAdapter da = new SqlDataAdapter(consulta, conexion);
                    DataSet ds = new DataSet();
                    da.Fill(ds);
                    for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                    {
                        tipodoc = new ArrayList();
                        tipodoc.Add(ds.Tables[0].Rows[i].ItemArray[0].ToString());
                        tipodoc.Add(ds.Tables[0].Rows[i].ItemArray[1].ToString());
                        dato.Add(tipodoc);
                    }
                }
                catch (Exception ex)
                {
                    string error = ex.Message;
                }
                finally
                {
                    conexion.Close();
                }

                return dato;
            }

            public static ArrayList buscarConstructor(string pTipo, string pNro)
            {
                string consulta = "SELECT c.nro_doc,c.nombre,c.apellido,c.email,c.celular,c.id_constructor,c.id_tipo FROM TB_CONSTRUCTOR c,TB_TIPO t WHERE c.id_tipo=t.id_tipo AND c.nro_doc='" + pNro + "' AND t.nombre='" + pTipo + "'";
                ArrayList registro = new ArrayList();
                ArrayList registros = new ArrayList();
                conexion = new SqlConnection(strConexion);
                try
                {
                    SqlDataAdapter da = new SqlDataAdapter(consulta, conexion);
                    DataSet ds = new DataSet();

                    conexion.Open();
                    da.Fill(ds);

                    if (ds.Tables[0].Rows.Count > 0)
                    {
                        registro.Add(ds.Tables[0].Rows[0].ItemArray[0].ToString());
                        registro.Add(ds.Tables[0].Rows[0].ItemArray[1].ToString());
                        registro.Add(ds.Tables[0].Rows[0].ItemArray[2].ToString());
                        registro.Add(ds.Tables[0].Rows[0].ItemArray[3].ToString());
                        registro.Add(ds.Tables[0].Rows[0].ItemArray[4].ToString());
                        registro.Add(ds.Tables[0].Rows[0].ItemArray[5].ToString());
                        registro.Add(ds.Tables[0].Rows[0].ItemArray[6].ToString());
                        registros.Add(registro);
                    }
                }
                catch (Exception ex)
                {
                    string error = ex.Message;
                }
                finally
                {
                    conexion.Close();
                }

                return registros;
            }
            
    
    
    public static bool actualizarOrdenTrabajo(long idOT, long idPresupuesto, long idCliente,DateTime fechaComienzo){

        bool devolver = false;
        conexion = new SqlConnection(strConexion);
        conexion.Open();
        SqlTransaction myTrans = conexion.BeginTransaction();
        SqlCommand cmd = conexion.CreateCommand();
      
        try
        {
            SqlParameter fechaParam = new SqlParameter("@fecha", SqlDbType.DateTime);
            cmd.Parameters.Add(fechaParam).Value = fechaComienzo;
            SqlParameter clienteParam = new SqlParameter("@cliente", SqlDbType.Int);
            cmd.Parameters.Add(clienteParam).Value = idCliente;
            SqlParameter presupParam = new SqlParameter("@presupuesto", SqlDbType.Int);
            cmd.Parameters.Add(presupParam).Value = idPresupuesto;
            SqlParameter idParam = new SqlParameter("@id", SqlDbType.Int);
            cmd.Parameters.Add(idParam).Value = idOT;

            cmd.CommandText = "UPDATE TB_ORDEN_TRABAJO SET id_cliente=@cliente,id_presupuesto=@presupuesto,fecha_inicio=@fecha WHERE id_orden_trabajo=@id";
            cmd.Transaction = myTrans;
            cmd.ExecuteNonQuery();
            myTrans.Commit();
            devolver = true;

        }
        catch (Exception ex)
        {
            string error = ex.Message;
            myTrans.Rollback();
        }
        finally
        {
            conexion.Close();
        }
        return devolver;
    
    }

    public static bool eliminarOrdenTrabajo(long codigo) {
        bool devolver = false;
        conexion = new SqlConnection(strConexion);
        conexion.Open();
        SqlTransaction myTrans = conexion.BeginTransaction();
        SqlCommand cmd = conexion.CreateCommand();

        try
        {
           
            SqlParameter idParam = new SqlParameter("@id", SqlDbType.Int);
            cmd.Parameters.Add(idParam).Value = codigo;

            cmd.CommandText = "DELETE FROM TB_ORDEN_TRABAJO WHERE id_orden_trabajo=@id";
            cmd.Transaction = myTrans;
            cmd.ExecuteNonQuery();
            myTrans.Commit();
            devolver = true;

        }
        catch (Exception ex)
        {
            string error = ex.Message;
            myTrans.Rollback();
        }
        finally
        {
            conexion.Close();
        }
        return devolver;
    }




    public static ArrayList buscarPresupuestoEnOT(int codPresupuesto)
    {
         string consulta = "SELECT id_orden_trabajo, id_presupuesto,id_estado_ot,id_cliente,fecha_inicio FROM TB_ORDEN_TRABAJO WHERE  id_presupuesto="+codPresupuesto;
                ArrayList orden;
                ArrayList dato = new ArrayList();
                conexion = new SqlConnection(strConexion);
                try
                {
                    SqlDataAdapter da = new SqlDataAdapter(consulta, conexion);
                    DataSet ds = new DataSet();

                    conexion.Open();
                    da.Fill(ds);

                    if ( ds.Tables[0].Rows.Count>0)
                    {
                        orden = new ArrayList();
                        orden.Add(ds.Tables[0].Rows[0].ItemArray[0].ToString());
                        orden.Add(ds.Tables[0].Rows[0].ItemArray[1].ToString());
                        orden.Add(ds.Tables[0].Rows[0].ItemArray[2].ToString());
                        orden.Add(ds.Tables[0].Rows[0].ItemArray[3].ToString());
                        orden.Add(ds.Tables[0].Rows[0].ItemArray[4].ToString());
             

                        dato.Add(orden);
                    }
                }
                catch (Exception ex)
                {
                    string error = ex.Message;
                }
                finally
                {
                    conexion.Close();
                }

                return dato;

        }


    public static bool eliminarUsuario(int pTipo, string nroDoc)
    {
            bool devolver = false;
            string consulta = "DELETE FROM TB_USUARIO WHERE id_tipo="+pTipo+" AND nro_doc='" + nroDoc + "'";

            conexion = new SqlConnection(strConexion);
            SqlCommand cmd = new SqlCommand(consulta, conexion);
            try
            {
                conexion.Open();
                cmd.ExecuteNonQuery();
                cmd.Dispose();
                devolver = true;

            }
            catch (Exception ex)
            {
                string error = ex.Message;
            }
            finally
            {
                conexion.Close();
            }
            return devolver;
        }

    public static ArrayList buscarAsignacion(int p)
    {
        string consulta = "SELECT id_asignacion, id_constructor,id_orden_trabajo, fecha_creacion,finalizado FROM TB_ASIGNACION WHERE id_orden_trabajo=" + p ;

        ArrayList obr;
        ArrayList dato = new ArrayList();
        conexion = new SqlConnection(strConexion);
        try
        {
            conexion.Open();
            SqlDataAdapter da = new SqlDataAdapter(consulta, conexion);
            DataSet ds = new DataSet();
            da.Fill(ds);
            for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
            {
                obr = new ArrayList();
                obr.Add(ds.Tables[0].Rows[i].ItemArray[0].ToString());
                obr.Add(ds.Tables[0].Rows[i].ItemArray[1].ToString());
                obr.Add(ds.Tables[0].Rows[i].ItemArray[2].ToString());
                obr.Add(ds.Tables[0].Rows[i].ItemArray[3].ToString());
                obr.Add(ds.Tables[0].Rows[i].ItemArray[4].ToString());
                dato.Add(obr);
            }
        }
        catch (Exception ex)
        {
            string error = ex.Message;
        }
        finally
        {
            conexion.Close();
        }

        return dato;
    }

    public static bool actualizarFinEtapa(int p)
    {
        bool devolver = false;
        string consulta = "UPDATE TB_ASIGNACION SET finalizado=1 WHERE id_orden_trabajo="+p;

        conexion = new SqlConnection(strConexion);
        SqlCommand cmd = new SqlCommand(consulta, conexion);
        try
        {
            conexion.Open();
            cmd.ExecuteNonQuery();
            cmd.Dispose();
            devolver = true;

        }
        catch (Exception ex)
        {
            string error = ex.Message;
        }
        finally
        {
            conexion.Close();
        }
        return devolver;
    }

    public static ArrayList buscarOrdenesDeTrabajo(int codConstructor)
    {
      

                string consulta = "SELECT o.id_orden_trabajo, o.id_presupuesto,o.id_estado_ot,o.id_cliente,o.fecha_inicio FROM TB_ASIGNACION a,TB_ORDEN_TRABAJO o where a.id_orden_trabajo=o.id_orden_trabajo and a.id_constructor="+codConstructor;
                ArrayList orden;
                ArrayList dato = new ArrayList();
                conexion = new SqlConnection(strConexion);
                try
                {
                    SqlDataAdapter da = new SqlDataAdapter(consulta, conexion);
                    DataSet ds = new DataSet();

                    conexion.Open();
                    da.Fill(ds);

                    for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                    {
                        orden = new ArrayList();
                        orden.Add(ds.Tables[0].Rows[i].ItemArray[0].ToString());
                        orden.Add(ds.Tables[0].Rows[i].ItemArray[1].ToString());
                        orden.Add(ds.Tables[0].Rows[i].ItemArray[2].ToString());
                        orden.Add(ds.Tables[0].Rows[i].ItemArray[3].ToString());
                        orden.Add(ds.Tables[0].Rows[i].ItemArray[4].ToString());
                     

                        dato.Add(orden);
                    }
                }
                catch (Exception ex)
                {
                    string error = ex.Message;
                }
                finally
                {
                    conexion.Close();
                }

                return dato;

            }
    
        public static ArrayList buscarOrdenDeTrabajo(int codigo,int codConstructor)
        {
 
      

                string consulta = "SELECT o.id_orden_trabajo, o.id_presupuesto,o.id_estado_ot,o.id_cliente,o.fecha_inicio FROM TB_ASIGNACION a,TB_ORDEN_TRABAJO o where a.id_orden_trabajo=o.id_orden_trabajo and o.id_orden_trabajo="+codigo +" and a.id_constructor="+codConstructor;
                ArrayList orden;
                ArrayList dato = new ArrayList();
                conexion = new SqlConnection(strConexion);
                try
                {
                    SqlDataAdapter da = new SqlDataAdapter(consulta, conexion);
                    DataSet ds = new DataSet();

                    conexion.Open();
                    da.Fill(ds);

                    for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                    {
                        orden = new ArrayList();
                        orden.Add(ds.Tables[0].Rows[i].ItemArray[0].ToString());
                        orden.Add(ds.Tables[0].Rows[i].ItemArray[1].ToString());
                        orden.Add(ds.Tables[0].Rows[i].ItemArray[2].ToString());
                        orden.Add(ds.Tables[0].Rows[i].ItemArray[3].ToString());
                        orden.Add(ds.Tables[0].Rows[i].ItemArray[4].ToString());
                     

                        dato.Add(orden);
                    }
                }
                catch (Exception ex)
                {
                    string error = ex.Message;
                }
                finally
                {
                    conexion.Close();
                }

                return dato;
}

        public static bool eliminarAsignacion(int p)
        {

            bool devolver = false;
            string consulta = "DELETE FROM TB_ASIGNACION WHERE id_orden_trabajo=" + p;

            conexion = new SqlConnection(strConexion);
            SqlCommand cmd = new SqlCommand(consulta, conexion);
            try
            {
                conexion.Open();
                cmd.ExecuteNonQuery();
                cmd.Dispose();
                devolver = true;

            }
            catch (Exception ex)
            {
                string error = ex.Message;
            }
            finally
            {
                conexion.Close();
            }
            return devolver;




        }

        public static bool buscarPresupuestos(int p)
        {
         
                string consulta = "SELECT id_presupuesto, id_estado_presupuesto,id_revestimiento,precio_reves,id_piscina,fecha_estado,apellido,direccion,mail,nombre,localidad, telefono,precio_m2 FROM TB_PRESUPUESTO where id_cliente="+p;
                ArrayList presupuesto;
                ArrayList dato = new ArrayList();
                conexion = new SqlConnection(strConexion);
                try
                {
                    SqlDataAdapter da = new SqlDataAdapter(consulta, conexion);
                    DataSet ds = new DataSet();

                    conexion.Open();
                    da.Fill(ds);

                    for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                    {
                        presupuesto = new ArrayList();
                        presupuesto.Add(ds.Tables[0].Rows[i].ItemArray[0].ToString());
                        presupuesto.Add(ds.Tables[0].Rows[i].ItemArray[1].ToString());
                        presupuesto.Add(ds.Tables[0].Rows[i].ItemArray[2].ToString());
                        presupuesto.Add(ds.Tables[0].Rows[i].ItemArray[3].ToString());
                        presupuesto.Add(ds.Tables[0].Rows[i].ItemArray[4].ToString());
                        presupuesto.Add(ds.Tables[0].Rows[i].ItemArray[5].ToString());
                        presupuesto.Add(ds.Tables[0].Rows[i].ItemArray[6].ToString());
                        presupuesto.Add(ds.Tables[0].Rows[i].ItemArray[7].ToString());
                        presupuesto.Add(ds.Tables[0].Rows[i].ItemArray[8].ToString());
                        presupuesto.Add(ds.Tables[0].Rows[i].ItemArray[9].ToString());
                        presupuesto.Add(ds.Tables[0].Rows[i].ItemArray[10].ToString());
                        presupuesto.Add(ds.Tables[0].Rows[i].ItemArray[11].ToString());
                        presupuesto.Add(ds.Tables[0].Rows[i].ItemArray[12].ToString());
                        dato.Add(presupuesto);
                    }
                }
                catch (Exception ex)
                {
                    string error = ex.Message;
                }
                finally
                {
                    conexion.Close();
                }

                return dato.Count > 0 ?true:false;

            
        }

        public static bool actualizarFinDeOT(int pOT)
        {
            bool devolver = false;
            string consulta = "UPDATE TB_ORDEN_TRABAJO SET id_estado_ot=@estado WHERE id_orden_trabajo=" + pOT;

            conexion = new SqlConnection(strConexion);
            SqlCommand cmd = new SqlCommand(consulta, conexion);
            cmd.Parameters.Add(new SqlParameter("@estado", SqlDbType.Int)).Value = (int)EstadoOTEnum.OT_TERMINADA;
            try
            {
                conexion.Open();
                cmd.ExecuteNonQuery();
                cmd.Dispose();
                devolver = true;

            }
            catch (Exception ex)
            {
                string error = ex.Message;
            }
            finally
            {
                conexion.Close();
            }
            return devolver;
        }
    }
    
}